Je suis en train de concevoir une api REST et d'être aussi RESTful que possible. Je veux incorporer HATEOAS = dans les réponses json.
L'ajout d'URL aux ressources connexes est assez facile, mais il y a eu une discussion sur la structure à utiliser pour ces liens.
BEAUCOUP d'articles que j'ai trouvés utilisent une structure empruntée à ATOME alimente:
"links": [
{"rel": "self", "href":"http://example.org/entity/1"},
{"rel": "friends", "href":"http://example.org/entity/1/friends"}, ...
]
Cela a soulevé certaines questions:
Pourquoi utiliser un tableau comme conteneur? Selon un développeur javascript que je connais, l'accès aux liens serait plus facile avec les liens comme propriétés d'un objet. Par exemple:
"self": { "href":"http://example.org/entity/1" }, /* (facebook uses this) */
"friends": { "href":"http://example.org/entity/1/friends", "type": "..."}
Existe-t-il une structure json commune (en plus d'adapter atom again) pour décrire des références dans les propriétés des ressources? (par exemple l'expéditeur d'un message).
La référence devrait probablement être résolue à nouveau en tant qu'URL, mais serait-il mauvais d'inclure également l'ID simple? un peu comme:
"sender": {
"id": 12345,
"href": "resource-uri"
}
Ma façon de penser est que même si HATEOAS fait en sorte qu'un client n'a pas besoin de beaucoup de connaissances pour utiliser une API, je suis un peu réticent à supprimer la possibilité d'utiliser ces connaissances (comme accéder à la photo de profil en créant le lien côté client sans rechercher d'abord l'utilisateur).
J'ai redémarré ce sujet sur le groupe Google API-Craft et j'ai obtenu d'excellentes réponses.
Les principaux avantages de la conception de la baie sont:
La carte de cause a une meilleure accessibilité.
En ce qui concerne la structure, il existe de nombreuses possibilités:
Je suppose que j'irai avec HAL car c'est la solution la plus propre, le reste a l'air un peu ... étrange pour json.
En ce qui concerne la structure, vous pouvez essayer de regarder HAL ( http://stateless.co/hal_specification.html ) ou JSON-LD: ( http: // json-ld. org / )
Je pense que c'est pour que vous puissiez proposer plusieurs liens basés sur la méthode http.
par exemple.
"links": [
{"rel": "sender", "method":"post", "href":"http://example.org/entity/1"},
{"rel": "sender", "method":"put", "href":"http://example.org/entity/1"}, ...
]
vous pourriez peut-être l'adapter à votre idée
"sender": {
"href":"http://example.org/entity/1",
"methods": ["put","post"]
}