2013-07-15 14 views
9

Non mi piace come strutturare in modo sensato un'API REST (o REST-like).Hai bisogno di aiuto per capire gli endpoint dell'API REST

Immagina un'API per la creazione e l'invio di e-mail di newsletter. Potresti avere i seguenti nomi/risorse: newsletter (soggetto, corpo, ecc.), Mailing list (raccolte di destinatari) e destinatari (indirizzi e-mail e dati associati).

Così si potrebbe utilizzare PUT per creare una risorsa e va restituita la sua ID:

/newsletter 
/list 
/user 

si potrebbe ottenere informazioni su una risorsa utilizzando GET:

/newsletter/[id] 
/list/[id] 
/user/[id] 

È possibile aggiornare una risorsa esistente utilizzando PATCH (o dovrebbe essere POST?):

/newsletter/[id] 
/list/[id] 
/user/[id] 

È possibile eliminare una risorsa utilizzando DELETE :

/newsletter/[id] 
/list/[id] 
/user/[id] 
  1. È quanto sopra è corretto?

  2. Quali endpoint sono sensibili per azioni come l'invio di una newsletter a un elenco, l'aggiunta di un utente a un elenco?

Ha senso, ed è RESTfull?

/newsletter/[newsletter_id]/send/[mailinglist_id] 
/list/[list_id]/add/[user_id] 
/list/[list_id]/remove/[user_id] 

È ridondante o poco disponibile ad avere list/[id]/add/[id] e list/[id]/remove/[id] endpoint per gli elenchi, quando gli utenti possono essere aggiunti o rimossi tramite patch /list/[id]?

E la ricerca di un ID utente tramite una proprietà come l'indirizzo di posta elettronica o il nome? O ottenere una lista tramite un identificatore come il suo nome o quando è stato creato?

risposta

7

Sei praticamente inchiodato, tranne che con il /list/[list_id]/add/[user_id] e /list/[list_id]/remove[user_id], perché hai i verbi nell'URL, che è lo scopo dei metodi HTTP.cambiarli a, per esempio:

PUT (or POST) to /list/[list_id]/users/ for adding a user to the list 

e

DELETE to /list/[list_id]/users/[user_id] 

per la ricerca, mi piacerebbe andare con URL con parametri per la lista delle risorse, come:

/newsletter/?name=dfjkhskdfh 
+0

E il verbo "invia"? – jeremiahs

1

Questi verbi sono spesso confuso:

  1. Per creare un'entità si utilizza POST
  2. Per aggiornare - PUT

Queste cose potrebbero essere trattati nel modo seguente:

POST /newsletters/[newsletter_id]/mailinglists/[mailinglist_id]/mailingfacts - Esegue l'invio delle lettere, è come l'aggiunta di un fatto di mailing al raccolta

/lists/[list_id]/[user_id] - aggiunge un utente all'elenco

/lists/[list_id]/[user_id] - elimina l'utente dall'elenco.

Problemi correlati