Modo RESTful per gestire le risorse correlate sia per istanze specifiche di una risorsa sia per tutte quelle risorse

3

Sto progettando un'API RESTful con una configurazione come questa:

/users - restituisce tutti gli utenti

/users/123 - restituisce l'utente con l'id 123

/users/123/comments - restituisce tutti i commenti per l'utente 123

Sto cercando il modo più corretto per restituire tutti i commenti per tutti gli utenti. I commenti non hanno il loro ID o identificatore e non esistono al di fuori del contesto di un utente, quindi non penso che /comments sarebbe l'ideale. Inoltre, non penso che /users/comments sarebbe l'ideale perché i commenti si spostano su e giù per la risorsa. Ho anche pensato di usare le intestazioni Prefer per filtrare i dati che vengono restituiti da /users a solo quei commenti.

Non sono sicuro su quale strada, o se in un altro modo, è il migliore. La risorsa effettiva che sto utilizzando non sono utenti e commenti, ma penso che sia un esempio abbastanza ragionevole.

    
posta loganhuskins 29.06.2017 - 16:02
fonte

2 risposte

6

Sembra un errore comune che i sottotracciati debbano indicare il contesto. Non c'è niente di sbagliato nell'usare /comments per tracciare tutti i commenti. Ti dà molta flessibilità in seguito se decidi di consentire ai clienti di lavorare con i singoli commenti.

    
risposta data 29.06.2017 - 16:33
fonte
1

Ricorda che gli URI sono identificatori . Non devono necessariamente fornire agli sviluppatori i dettagli di implementazione del lato server.

Dal punto di vista del consumatore dell'API, la gerarchia o la relazione tra utente e commenti dovrebbero essere espliciti nella rappresentazione delle risorse, non negli identificatori delle risorse.

Se consideri l'intera raccolta di commenti come una risorsa, quindi fornisci la risorsa con un URI, indipendentemente dal modo in cui la risorsa viene modellata sul lato server.

L'URI /comments è perfettamente valido. E sii piuttosto perché l'API continuerà a essere REST.

Condividerò qui alcuni collegamenti che potrebbero aiutarti a esaminare il problema da un altro punto di vista.

W3.org

(Un po 'vecchio, ma ancora valido)

Axiom: Opacity of URIs

The only thing you can use an identifier for is to refer to an object. When you are not dereferencing, you should not look at the contents of the URI string to gain other information.

For the bulk of Web use URIs are passed around without anyone looking at their internal contents, the content of the string itself. This is known as the opacity. Software should be made to treat URIs as generally as possible, to allow the most reuse of existing or future schemes.

Questo assioma non è cambiato nel corso degli anni.

RFC dell'URI

Punto di vista del consumatore

1.2.3. Hierarchical Identifiers

The URI syntax is organized hierarchically, with components listed in order of decreasing significance from left to right. For some URI schemes, the visible hierarchy is limited to the scheme itself: everything after the scheme component delimiter (":") is considered
opaque to URI processing
. Other URI schemes make the hierarchy
explicit and visible to generic parsing algorithms.

Punto di vista dello sviluppatore

1.2. Design Considerations

1.2.1. Transcription

[...]

A URI often has to be remembered by people, and it is easier for people to remember a URI when it consists of meaningful or familiar components.

Mentre l'URI è opaco per il consumatore, non è necessariamente opaco per l'umano. Quindi possiamo ancora rendere leggibili gli URI non appena condiziona il sistema. Ultimatelly, i requisiti hanno l'ultima parola.

    
risposta data 29.06.2017 - 17:06
fonte

Leggi altre domande sui tag