L'aspetto dei tuoi URL non ha nulla a che fare con REST. Tutto va bene. In realtà è un "dettaglio di implementazione". Quindi, proprio come il nome delle variabili. Tutto ciò che devono essere è unico e durevole.
Non perdere troppo tempo su questo, basta fare una scelta e attenersi ad essa / essere coerenti. Ad esempio, se vai con le gerarchie, lo fai per tutte le tue risorse. Se si utilizzano parametri di query ... ecc. Proprio come le convenzioni di denominazione nel codice.
Perchè così ? Per quanto ne so, un'API "RESTful" deve essere sfogliabile (sai ... "Hypermedia come motore dello stato dell'applicazione"), quindi un client API non si preoccupa di come sono i tuoi URL purché siano valido (non c'è SEO, nessun essere umano che deve leggere quegli "URL amichevoli", tranne che per il debug ...)
Quanto è bello / comprensibile un URL in un'API REST è interessante solo per te come sviluppatore API, non come client API, come sarebbe il nome di una variabile nel tuo codice.
La cosa più importante è che il tuo client API sappia come interpretare il tuo tipo di media. Ad esempio, sa che:
- il tuo tipo di media ha una proprietà di collegamenti che elenca i collegamenti disponibili / correlati.
- Ogni collegamento è identificato da una relazione (proprio come i browser sanno che il collegamento [rel = "foglio di stile"] significa che è un foglio di stile o rel = favico è un collegamento a una favicon ...)
- e sa cosa significano quelle relazioni ("aziende" significa un elenco di aziende, "ricerca" significa un URL basato su modelli per fare una ricerca in un elenco di risorse, "dipartimenti" significa dipartimenti della risorsa corrente)
Di seguito è riportato un esempio di scambio HTTP (i corpi sono in yaml poiché è più facile da scrivere):
Richiesta
GET / HTTP/1.1
Host: api.acme.io
Accept: text/yaml, text/acme-mediatype+yaml
Risposta: un elenco di collegamenti alle risorse principali (aziende, persone, qualunque cosa ...)
HTTP/1.1 200 OK
Date: Tue, 05 Apr 2016 15:04:00 GMT
Last-Modified: Tue, 05 Apr 2016 00:00:00 GMT
Content-Type: text/acme-mediatype+yaml
# body: this is your API's entrypoint (like a homepage)
links:
# could be some random path https://api.acme.local/modskmklmkdsml
# the only thing the API client cares about is the key (or rel) "companies"
companies: https://api.acme.local/companies
people: https://api.acme.local/people
Richiesta: collegamento a società (utilizzando body.links.companies della risposta precedente)
GET /companies HTTP/1.1
Host: api.acme.local
Accept: text/yaml, text/acme-mediatype+yaml
Risposta: un elenco parziale di aziende (sotto gli articoli), la risorsa contiene collegamenti correlati, come il collegamento per ottenere la coppia successiva di società (body.links.next) un altro collegamento (basato su modelli) per la ricerca (body.links.search)
HTTP/1.1 200 OK
Date: Tue, 05 Apr 2016 15:06:00 GMT
Last-Modified: Tue, 05 Apr 2016 00:00:00 GMT
Content-Type: text/acme-mediatype+yaml
# body: representation of a list of companies
links:
# link to the next page
next: https://api.acme.local/companies?page=2
# templated link for search
search: https://api.acme.local/companies?query={query}
# you could provide available actions related to this resource
actions:
add:
href: https://api.acme.local/companies
method: POST
items:
- name: company1
links:
self: https://api.acme.local/companies/8er13eo
# and here is the link to departments
# again the client only cares about the key department
department: https://api.acme.local/companies/8er13eo/departments
- name: company2
links:
self: https://api.acme.local/companies/9r13d4l
# or could be in some other location !
department: https://api2.acme.local/departments?company=8er13eo
Quindi, come vedi se segui i collegamenti / le relazioni nel modo in cui strutturi la parte del percorso dei tuoi URL non ha alcun valore per il tuo client API. E se stai comunicando la struttura dei tuoi URL al tuo cliente come documentazione, allora non stai eseguendo REST (o almeno non il Livello 3 secondo " Modello di maturità di Richardson ")