RESTful API erforderlichen Parameter im query-string?
Beim entwerfen eines RESTful-API, was zu tun ist, wenn eine GET-Anfrage ist nur sinnvoll, wenn es spezifische Parameter im Zusammenhang mit der Anfrage? Sollten die Parameter übergeben werden als query-string, und wenn ja, was ist zu tun, wenn alle Parameter nicht angegeben oder sind nicht richtig formatiert?
Zum Beispiel, können sagen, ich habe ein Post-Ressource, die zugegriffen werden kann durch `api/posts " endpoint. Jeder Beitrag hat eine geographische Lage und die Beiträge können abgerufen werden NUR bei Angabe einer Gegend, die Beiträge können in wohnen. Also 3 Parameter sind erforderlich: Breitengrad, Längengrad und radius.
Kann ich denke an 2 Optionen in diesem Fall:
1. Setzen Sie die Parameter im query-string: api/posts/?lat=5.54158&lng=71.5486&radius=10
2. Setzen die Parameter in der URL: api/posts/lat/5.54158/lng/71.5486/radius/10
Welche dieser wäre der richtige Ansatz? Es scheint falsch zu setzen der erforderlichen Parameter in der Abfrage-string, aber der letztere Ansatz fühlt sich etwas 'hässlicher'.
PS. Ich bin mir bewusst, es gibt viele Diskussion über dieses Thema bereits (zum Beispiel: REST-API Best practices: Wo setzen Sie Parameter?), aber meine Frage ist insbesondere an den Fall, wenn Parameter benötigt werden, nicht optional.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch die REST API erfüllen muss, der REST Einschränkungen, die beschrieben werden in den Fielding dissertation. Eine dieser Einschränkungen ist die einheitliche Schnittstelle Einschränkung, die auch die HATEOAS-Einschränkung. Nach dem HATEOAS-Einschränkung der API muss dazu dienen, ein standard-hypermedia-format als Antwort. Diese hypermedia enthält hyperlinks (z.B. HTML-links, Formulare) annotiert mit Metadaten (z.B. link-relation oder RDF-annotation). Die Kunden überprüfen die Metadaten, die erklärt Ihnen, was der hyperlink nicht. Danach können Sie entscheiden, ob Sie möchten, um dem link zu Folgen oder nicht. Wenn Sie dem link Folgen, können Sie bauen die HTTP-Anforderung basierend auf der URI-template, Parameter, etc...) und senden Sie es an den REST-Dienst.
In deinem Fall ist es egal, welche URI-Struktur, die Sie verwenden, ist es für die service-Nutzung nur, da der client verwendet immer den bestimmten URI-template und der Kunde nicht kümmern, was in dieser Vorlage, bis es eine gültige URI-Vorlage, die Sie füllen kann mit Parameter.
In den meisten Fällen Ihre Kunden hat genug Validierung von Informationen zu testen, ob die Parameter sind falsch oder fehlen. In diesem Fall ist es nicht senden Sie eine HTTP-Anforderung, so haben Sie nichts zu tun, im service. Wenn ein Ungültiger param bekommt, dann ist in Ihrem Fall Ihren service wieder sendet einen 404 - nicht gefunden, da der URI der Ressource-Bezeichner und keine Ressource gehört zu einer ungültigen URI (generiert aus der gegebenen URI-template und ungültige Parameter).
Den ersten Ansatz besser ist.
Der zweite Ansatz ist ein wenig irreführend.
Sollten Sie denken Sie an jedem Ihrer Verzeichnisse als Ressourcen. In dieser Ursache, sub-Ressourcen (zum Beispiel: "api/posts/lat/5.54158") sind nicht wirklich die Ressourcen und somit irreführend. Es gibt Fälle, wo dieses Muster ist eine bessere Lösung, aber mit Blick auf das, was gegeben ist, würde ich mit dem Abfrage-string. Es sei denn, Sie haben eine Entität verknüpfen verlinken Sie direkt zu diesem URL, ich weiß nicht wirklich, wie es.
Sollte man alles in die query-string ein und setzen Sie den server liefern einen Fehlercode zurück, wenn nicht, empfangen die 3 benötigten Parameter.
Weil es eine Gruppe von parameter, identifizieren Sie ein Objekt.
Nehmen wir das Beispiel:
lat=5.54158; lng=71.5486 radius=10
Wäre es sehr unwahrscheinlich, dass diese url sinnvoll:
api/posts/lat/5.54158/lng/yyyy/radius/zz
Ist es anders, als:
api/memb/35/..
da das Mitglied mit der id 35 kann eine Menge von Funktionen ( also gültige urls ) als:
api/memb/35/status
oderapi/memb/35/lastlogin