Ich möchte sehen, ob mehr erfahrene Web-Service-Veteranen den besten Weg zur Gestaltung eines REST-fähigen URI kommentieren können, in dem ich obligatorische Parameter brauche. Zum Beispiel möchte ich einen URI entwerfen, der Daten anfordert:
%Vor%Nach meinem Verständnis besteht der Ansatz jedoch darin, dass mehr Daten auf den höheren Ebenen zurückgegeben werden, während detailliertere Daten zurückgegeben werden, wenn spezifischere URI-Schlüsselwörter verwendet werden, aber in meinem Fall sind dafür mindestens drei Werte erforderlich . Diese 3 Werte wären ein Datumswert, ein Kontowert und proprietäre Verteilungscodewerte. Zum Beispiel:
%Vor%Wird das als "RESTful" -URL angesehen oder gibt es einen besseren Ansatz, der mehr Sinn ergibt? Jede Eingabe wird sehr geschätzt.
BTW, Python ist die Sprache der Wahl. Danke!
URIs können per definitionem nicht "unwiederholbar" sein, weil die URI-Spezifikation vom REST-Architekturstil geleitet wurde. Wie Sie einen URI verwenden, kann den REST-Stil verletzen durch:
Keine der oben genannten Optionen sind notwendigerweise schlechte Entscheidungen . Sie können die beste Wahl für Ihr System sein, weil sie bestimmte architektonische Eigenschaften (wie Effizienz oder Sicherheit) fördern. Sie sind nicht Teil des REST-Stils.
Die Tatsache, dass Ihre Ressource durch mehrere obligatorische Segmente identifiziert wird, ist ein wesentlicher Bestandteil des Entwurfs von URIs. Wie Anton hervorhebt, ist die Wahl zwischen example.com/request/distribution?acct=123&date=20030102&distcode=1A;1B;1C
und, sagen wir, example.com/accounts/123/distributions/20030102/1A;1B;1C
nur eine der Datenkonstruktionen und nicht ein Problem der URI-Schicht selbst. Es gibt nichts Falsches, zum Beispiel beim Antworten auf eine PUT-, POST- oder DELETE-Anfrage an die erste. Ein Client, der einem Link zu keinem der beiden Links folgt, wird als fehlerhaft betrachtet. Ein System, von dem erwartet wird, dass es entweder durch eine andere Möglichkeit als eine Hypermedia-Antwort für den Client verfügbar gemacht wird, würde als "nicht reversibel" betrachtet werden.
Es ist besser, zunächst REST-konforme APIs zu erstellen, nicht URIs. Es hat mehr mit Ihrem Datendesign zu tun als beispielsweise mit Ihrer bevorzugten Sprache.
ZB haben Sie eine Verteilungsressource. Sie möchten es in Ihrer webbasierten API darstellen, daher muss es über eine entsprechende eindeutige Ressourcen-ID (URI) verfügen. Es sollte einfach, lesbar und kaum zu ändern sein. Dies wäre ein anständiges Beispiel:
%Vor%Denken Sie zweimal nach, bevor Sie weitere Dinge und eine Hierarchie in Ihre URIs einfügen .
Sie möchten Ihre URIs nicht ändern, wenn sich Ihr Datenmodell oder Ihr Authentifizierungsschema weiterentwickelt. Ändern URIs ist uncool und Schmerzen für Sie und Entwickler, die Ihre API verwenden. Also, wenn Sie die Authentifizierung auf dem Back-End übergeben müssen, sollten Sie wahrscheinlich GET verwenden Parameter oder HTTP-Header (AWS S3 API zum Beispiel erlaubt beide ).
Setzen zu viel in GET-Parameter (zB http://example.com/api/distribution/?id=<some_unique_id>
) kann wie eine schlechte Idee erscheinen, aber IMO ist es nicht wirklich wichtig [0] -wie lange Sie halten Ihre API-Dokumentation zugänglich und up-to-date .
[0] Update: Für schreibgeschützte APIs mindestens. Für CRUD-APIs ist es, wie @daniel gezeigt hat, bequemer, wenn Sie Endpunkte wie im ersten Beispiel oben haben. Auf diese Weise können Sie HTTP-Methoden verwenden, indem Sie GET, PUT, DELETE für einzelne Ressourcen in /api/distribution/<id>
und POST in /api/distribution
aktivieren, um neue Distributionen zu erstellen.
die Antwort Bei der Recherche, fand eine schöne Präsentation über RESTful APIs: Entwerfen von HTTP-Schnittstellen und RESTful-Webdiensten .
Tags und Links python rest design web-services uri