Je suis en train de créer une API REST et actuellement, je rencontre le problème suivant:
Fooest la première ressource. Les opérations CRUD peuvent être appliquées via l'/foo/URI.Barest la deuxième ressource. Les opérations CRUD peuvent être appliquées via l'/bar/URI.- Tout
Fooest associé à zéro ou unBar. La raison pour laquelle je ne traite pasBarcomme une sous-ressource deFooest parce que la mêmeBarinstance peut être partagée entre plusieurs mutuelsFoo. J'ai donc pensé qu'il valait mieux y accéder via un URI indépendant au lieu de/foo/[id]/bar.
Mon problème est que dans un nombre important de cas, les clients qui demandent une Fooinstance sont également intéressés par l' Barinstance associée . Actuellement, cela signifie qu'ils doivent effectuer deux requêtes au lieu d'une. Je veux présenter un moyen qui permet d'obtenir les deux objets avec une seule requête, mais je ne sais pas comment modéliser l'API pour le faire. Ce que j'ai trouvé jusqu'à présent:
- Je pourrais introduire un paramètre de requête similaire à ceci:
/foo/[id]?include_bar=true. Le problème avec cette approche est que la représentation des ressources (par exemple la structure JSON) de la réponse devrait avoir un aspect différent (par exemple, un conteneur tel qu'au{ foo: ..., bar: ... }lieu d'être juste un sérialiséFoo), ce qui rend leFoopoint de terminaison de la ressource "hétérogène". Je ne pense pas que ce soit une bonne chose. Lors de la requête/foo, les clients doivent toujours obtenir la même représentation des ressources (structure), quels que soient les paramètres de requête. - Une autre idée consiste à introduire un nouveau point de terminaison en lecture seule, par exemple
/fooandbar/[foo-id]. Dans ce cas, ce n'est pas un problème de retourner une représentation comme{ foo: ..., bar: ... }, car alors c'est juste la représentation "officielle" de lafooandbarressource. Cependant, je ne sais pas si un tel point de terminaison d'aide est vraiment RESTful (c'est pourquoi j'ai écrit "can" dans le titre de la question. Bien sûr, c'est techniquement possible, mais je ne sais pas si c'est une bonne idée).
Qu'est-ce que tu penses? Y a-t-il d'autres possibilités?
Barne peut exister sans être associé à un Foo. Cependant, comme je l'ai écrit ci-dessus, il est possible que plusieurs Foos partagent la même chose Bar. Il devrait être possible de créer un Foosans Barassocié, donc je ne pense pas que cela Bardevrait être traité comme parent.