Quanto dovrebbe essere discreta un'API RESTful?


12

Non ho mai creato un'API RESTful prima e mi chiedo quanto dovrebbe essere discreto?

Ad esempio diciamo che ho un cliente che ha un nome, indirizzo, numero di telefono, indirizzo e-mail, lingua, ecc.

Ha senso che ci sia un modo per aggiornare ogni singolo campo (indirizzo di aggiornamento, indirizzo e-mail di aggiornamento, ecc.) O dovrebbe esserci un singolo aggiornamento per l'intero cliente e ogni campo è opzionale?


3
Quale parte di REST vuoi? Se hai solo bisogno di una semplice API che non si preoccupi degli standard, puoi gestirla proprio come la risposta accettata di thorsten müller. Se vuoi un vero REST devi cercare Roy Fielding (+ tesi per esempio). È l'inventore di REST. Vedrai ad esempio che l'idea che una risorsa == una tabella non sia la verità. Scoprirai inoltre che, ad esempio, per la tua domanda un metodo PATCH HTTP è abbastanza comune da utilizzare per l'aggiornamento di uno o più campi. Dove è possibile utilizzare il metodo POST o PUT (molte discussioni qui) per aggiornamenti completi su una risorsa.
Luc Franken,

Risposte:


17

Hai un'azione di aggiornamento per una risorsa. Come regola generale una tabella nel database sarà una risorsa. Quindi nel tuo esempio esiste un controller per il Cliente con un'azione di aggiornamento e i campi sono facoltativi per quanto possibile.

Ci possono essere eccezioni a questo (ad esempio se aggiorni la password che ti aspetti password e password_conferma), ma questo vale per la maggior parte dei casi.

È più probabile che le eccezioni siano controller che hanno azioni limitate per alcune risorse, come un SessionsController che può solo essere creato e distrutto. È molto improbabile che tu voglia intraprendere azioni per singoli campi.

Nel tuo esempio una cosa potrebbe essere gestita come una risorsa propria e questo è l'indirizzo. Se avessi una tabella per gli indirizzi, specialmente se ci fosse più di un indirizzo per cliente (fatturazione, consegna ...) questo potrebbe essere gestito come una risorsa nidificata. Ma ancora una volta un'azione di aggiornamento per l'intera risorsa dell'indirizzo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.