Ho una domanda su come progettare un URI di risorse con chiavi composite.REST - come progettare un URI con chiavi composite?
Ho una risorsa denominata trasporto che ha 4 chiavi/id: ID partner, codice postale iniziale, codice postale finale e peso.
In realtà la mia risorsa è stata progettata per avere un ID incrementale generato da database, ma questo approccio non è così buono per i consumatori API, ad esempio, se un consumatore/partner ha bisogno di aggiornare un informazioni merci che devono fare:
?GET merci initialZipcode = {valore} & finalZipcode = {valore} & peso = {valore}
la risposta dell'operazione di cui sopra sarebbe l'ID di merci, così alla fine si può aggiornare informazioni:
PUT merci/{ID}
L'ID partner è implicito dal meccanismo di autenticazione.
Per me sembra strano costringere i partner a ottenere l'ID di trasporto prima di aggiornare le informazioni.
Quindi la mia domanda è: come posso progettare questo URI?
PUT merci/initialZipcode/{valore}/finalZipCode/{valore}/peso/{valore}
ho io a prendere in considerazione il progetto di cui sopra?
Un'altra domanda: è una buona pratica incorporare l'ID partner nel meccanismo di autenticazione? Conosco i pro (facile per i consumatori) e contro (cache, impossibilità di condividere un URI, ecc.), Ma non so se generalmente è una buona o cattiva pratica.
Grazie!
Ciao Darrel, grazie per la tua risposta. Per me il tuo (primo) approccio mi sembra strano perché sempre uso il concetto di ID che non uso come parametro di query, come hai mostrato tu. Per me i parametri di query determinano opzioni extra in una risorsa specifica, come: filtro, ricerca, ordinamento, impaginazione, ecc. Ho altri casi nella mia API per aggiornare una risorsa e in tutti questi casi ho utilizzato l'ID in URI (parametro path), quindi se ho un altro caso in cui l'aggiornamento è con parametri mi sento come se stessi ferendo il concetto di interfaccia unificata. Mi sbaglio? – Krock
@Krock RFC 3986 afferma che i parametri della query fanno parte dell'identificazione della risorsa. Non sono alcuni metadati extra. Questo era un chiarimento fatto dalla versione precedente della specifica URI. http://tools.ietf.org/html/rfc3986#section-3.4 Un client dovrebbe trattare l'intero URI come un identificatore opaco. –
Mi hai convinto :) Ma nel caso di creare un nuovo carico? Come posso restituire la risposta? Con un ID la risposta sarebbe una 'Posizione' al trasporto che è stato creato (es: trasporto/ID), ma se non ho un ID qual è la risposta? Una posizione per il trasporto? InitialZipcode = {VALUE} e finalZipcode = {VALUE} e peso = {VALUE}? – Krock