L'aspect de vos URL n'a rien à voir avec REST. Tout va. Il s'agit en fait d'un "détail d'implémentation". Donc, tout comme la façon dont vous nommez vos variables. Tout ce qu'ils doivent être est unique et durable.
Ne perdez pas trop de temps à ce sujet, faites simplement un choix et respectez-le / soyez cohérent. Par exemple, si vous optez pour des hiérarchies, vous le faites pour toutes vos ressources. Si vous allez avec des paramètres de requête ... etc, tout comme les conventions de dénomination dans votre code.
Pourquoi Pour autant que je sache, une API "RESTful" doit être consultable (vous savez ... "Hypermedia en tant que moteur de l'état de l'application"), donc un client API ne se soucie pas de ce que sont vos URL tant qu'elles sont valide (il n'y a pas de référencement, pas d'humain qui a besoin de lire ces "URL amicales", sauf peut-être pour le débogage ...)
Le caractère agréable / compréhensible d'une URL dans une API REST ne vous intéresse qu'en tant que développeur d'API, pas en tant que client d'API, comme le serait le nom d'une variable dans votre code.
La chose la plus importante est que votre client API sache comment interpréter votre type de média. Par exemple, il sait que:
- votre type de média a une propriété de liens qui répertorie les liens disponibles / liés.
- Chaque lien est identifié par une relation (tout comme les navigateurs savent que le lien [rel = "stylesheet"] signifie que c'est une feuille de style ou rel = favico est un lien vers un favicon ...)
- et il sait ce que ces relations signifient («sociétés» signifie une liste de sociétés, «recherche» signifie une URL basée sur un modèle pour effectuer une recherche sur une liste de ressources, «départements» signifie des départements de la ressource actuelle)
Voici un exemple d'échange HTTP (les corps sont en yaml car il est plus facile d'écrire):
Demande
GET / HTTP/1.1
Host: api.acme.io
Accept: text/yaml, text/acme-mediatype+yaml
Réponse: une liste de liens vers la ressource principale (entreprises, personnes, peu importe ...)
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
Demande: lien vers les entreprises (en utilisant la réponse précédente body.links.companies)
GET /companies HTTP/1.1
Host: api.acme.local
Accept: text/yaml, text/acme-mediatype+yaml
Réponse: une liste partielle des sociétés (sous les éléments), la ressource contient des liens connexes, comme un lien pour obtenir les deux sociétés suivantes (body.links.next), un autre lien (basé sur un modèle) pour rechercher (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
Donc, comme vous le voyez, si vous suivez les liens / relations, la façon dont vous structurez la partie chemin de vos URL n'a aucune valeur pour votre client API. Et si vous communiquez la structure de vos URL à votre client en tant que documentation, alors vous ne faites pas REST (ou du moins pas le niveau 3 selon le " modèle de maturité de Richardson ")