Ich bin neu auf der Server-Seite Web-Entwicklung und vor kurzem habe ich viel über die Implementierung von RESTful APIs gelesen. Ein Aspekt der REST-APIs, an denen ich immer noch festhalte, ist die Strukturierung der URI-Hierarchie, die Ressourcen identifiziert, mit denen der Client interagieren kann. Insbesondere muss ich entscheiden, wie detailliert die Hierarchie erstellt werden soll und was zu tun ist, wenn Ressourcen aus anderen Ressourcentypen bestehen.Wie strukturiert man die REST-Ressourcenhierarchie?
Hier ist ein Beispiel, das hoffentlich zeigen wird, was ich meine. Stellen Sie sich vor, wir haben einen Webservice, mit dem Nutzer Produkte von anderen Nutzern kaufen können. Also in diesem einfachen Fall gibt es zwei Top-Level-Ressourcen Benutzer und Produkte. Hier ist, wie ich begann, die URI-Hierarchie zu strukturieren,
Für Benutzer:
/users
/{id}
/location
/about
/name
/seller_rating
/bought
/sold
Für Produkte:
/products
/{id}
/name
/category
/description
/keywords
/buyer
/seller
In beiden Fällen Objekte in jeder Hierarchie Referenz eine Teilmenge der Objekte in der anderen Hierarchie. Zum Beispiel ist /users/{id}/bought
eine Liste der Produkte, die ein Benutzer gekauft hat, was eine Untermenge von /products
ist. Außerdem bezieht sich /products/{id}/seller
auf den Benutzer, der ein bestimmtes Produkt verkauft hat.
Da diese URIs auf andere Objekte oder Teilmengen anderer Objekte verweisen, sollte die API Folgendes unterstützen: /users/{id}/bought/id/description
und /products/{id}/buyer/location
? Weil, wenn diese Arten von URIs unterstützt werden, was etwas wie dieses /users/{id}/bought/{id}/buyer/bought/{id}/seller/name
, oder etwas ähnlich gewundenes zu stoppen ist? Wie würden Sie in diesem Fall auch mit dem Routing verfahren, da der Router im Server URIs beliebiger Länge interpretieren müsste?
Also, was Sie sagen, ist, dass jede Ressource im System genau einen hat ** ** URI? Weil das alles viel einfacher macht. Was würden Sie im obigen Beispiel empfehlen, wenn ich den Verkäufer eines Produkts über die API anzeigen möchte (Produkte haben nur einen Verkäufer)? Soll ich Leute dazu bringen, * GET/products/{id} * zu machen, die ein JSON-Objekt mit dem Verkäufer zurückgeben? – martega
JSON für '/ products/{id}' kann verschachteltes Benutzerobjekt für Ihre Bequemlichkeit oder URL zu diesem Benutzer enthalten, es ist Ihre Wahl und es ändert nicht die Tatsache, dass beide getrennt existieren. – Anri
BTW, hilft es, die APIs anderer Dienste zu betrachten. Zum Beispiel: https://developer.foursquare.com/docs/venues/venues – Anri