Come dovrei incorporare un endpoint di messaggi in un'API REST?

3

Sto progettando un'API REST che deve consentirmi di inviare messaggi ai membri del sistema.

In questo momento, sto pensando di creare un endpoint /messages a cui faccio una richiesta POST quando voglio inviare un messaggio, fornendo l'ID di un membro e il contenuto del messaggio. Il problema che vedo con questo approccio è la gestione del caso in cui qualcuno fornisce un ID membro inesistente. Ritornerei un 404 in questo caso?

Un altro approccio sarebbe quello di rendere la parte endpoint dei messaggi dell'endpoint dei membri. Quindi, vorrei fare qualcosa come fare una richiesta di POST a /members/{member-id}/messages , semplicemente fornendo il contenuto del messaggio. Quindi, se il membro non viene trovato, posso solo restituire un 404 .

Quale approccio è più RESTful? O ci sono approcci migliori che non ho considerato? Qualsiasi aiuto sarebbe molto apprezzato.

    
posta Matt G. 13.04.2018 - 17:25
fonte

3 risposte

1

Per questo semplice caso, è meglio la seconda alternativa:

/members/{member-id}/messages

E puoi restituire 404 se non è stato trovato member-id .

I'm thinking about creating a /messages endpoint that I make a POST request to when I want to send a message, providing a member's ID and the message content. The problem that I see with this approach is handling the case where someone provides a non-existent member ID. Would I return a 404 in this case?

Anche questa è un'alternativa valida. A volte, è necessario "rompere" alcuni endpoint di grandi dimensioni. Ad esempio, invece di qualcosa di simile:

/members/{id}/carts/{id}/orders/{id}/products/{id}/

Puoi avere due endpoint:

/members/{id}/carts/{id}/
/orders/{id}/products/{id}/ 

Il necessario id s sarà nel corpo della richiesta. Ad esempio, nella seconda richiesta il member e cart id sarà nel corpo della richiesta.

E non vedo alcun problema al momento del ritorno 404. Se 404 ti dà fastidio, puoi usare un altro codice. La cosa più importante è essere coerenti con la tua API.

    
risposta data 13.04.2018 - 19:07
fonte
0

The problem that I see with this approach is handling the case where someone provides a non-existent member ID. Would I return a 404 in this case?

No. 400 sarebbe ok. La risorsa esiste ed è stata trovata ( /messages ). Stava elaborando ciò che non era riuscito a causa di un input non valido. Quindi, il cliente può riprovare non appena risolve i problemi.

404 non è così "gentile". Il "continuare a provare" non è così esplicito.

Another approach would be to make the messages endpoint part of the members endpoint. So, I would do something like make a POST request to /members/{member-id}/messages

discutibile.

Pensa solo ai servizi di posta web. Come manderebbero e-mail a un elenco di e-mail, con copia ad altre e-mail, ecc.

Come faresti con tale design API? Iterare su N URI? Abbastanza discutibile.

In modo definitivo, nessuno scrive un messaggio e lo invia direttamente e si avvicina alla casella di arrivo del bersaglio. O raccolta di e-mail.

Vorrei andare all'opzione n. 1, perché sembra più naturale per questo tipo di attività (invio di messaggi).

    
risposta data 13.04.2018 - 20:29
fonte
0

I'm designing a REST API that needs to allow me to send messages to members in the system.

Forse dovresti esaminare la pubblicazione Atom ; rendere i messaggi disponibili agli abbonati non è poi così diverso da creazione di voci di Atom in un feed.

... Which approach is more RESTful?

Né - A REST non importa come organizzi le tue risorse, né quali ortografie usi per gli identificatori. Uno dei vantaggi di REST è che il cliente è disaccoppiato da quelle preoccupazioni.

    
risposta data 16.04.2018 - 14:52
fonte

Leggi altre domande sui tag