Beim Entwerfen einer RESTful-Schnittstelle wird die Semantik der Anforderungstypen als entscheidend für den Entwurf erachtet.
- GET - Listet das Element auf oder ruft es ab
- PUT - Sammlung oder Element ersetzen
- POST - Erstellt eine Sammlung oder ein Element
- LÖSCHEN - Nun, ähm, lösche Sammlung oder Element
Dies scheint jedoch nicht das Konzept der "Suche" abzudecken.
ZB beim Entwerfen einer Suite von Webdiensten, die eine Jobsucheseite unterstützen, müssen Sie möglicherweise folgende Anforderungen erfüllen:
- Erhalten Sie individuelle Stellenanzeigen
- GET to
domain/Job/{id}/
- GET to
- Stellenanzeige erstellen
- POST zu
domain/Job/
- POST zu
- Stellenanzeige aktualisieren
- PUT to
domain/Job/
- PUT to
- Stellenanzeige löschen
- LÖSCHEN bis
domain/Job/
- LÖSCHEN bis
"Get All Jobs" ist auch einfach:
- GET to
domain/Jobs/
Wie aber fällt die Jobsuche in diese Struktur?
Sie könnten behaupten, dass es sich um eine Variante der "Listensammlung" handelt, die implementiert wird als:
- GET to
domain/Jobs/
Suchen können jedoch komplex sein und es ist durchaus möglich, eine Suche zu erstellen, die eine lange GET-Zeichenfolge generiert. Das heißt, wenn hier auf eine SO-Frage verwiesen wird , treten Probleme bei der Verwendung von GET-Zeichenfolgen auf, die länger als etwa 2000 Zeichen sind.
Ein Beispiel könnte eine facettierte Suche sein - Fortsetzung des Beispiels "Job".
Ich kann die Suche nach Facetten - "Technologie", "Berufsbezeichnung", "Disziplin" sowie nach Freitext-Stichwörtern, Berufsalter, Standort und Gehalt - zulassen.
Mit einer fließenden Benutzeroberfläche und einer Vielzahl von Technologien und Berufsbezeichnungen ist es möglich, dass eine Suche eine Vielzahl von Facettenauswahlmöglichkeiten umfasst.
Wenn Sie dieses Beispiel an Lebensläufen anstatt an Jobs anpassen, erhalten Sie noch mehr Facetten, und Sie können sich sehr leicht eine Suche mit hundert ausgewählten Facetten oder sogar nur 40 Facetten mit jeweils 50 Zeichen vorstellen (z. B. Jobtitel, Universitätsnamen, Arbeitgebernamen).
In diesem Fall ist es möglicherweise wünschenswert, einen PUT oder POST zu verschieben, um sicherzustellen, dass die Suchdaten korrekt gesendet werden. Z.B:
- POST zu
domain/Jobs/
Aber semantisch ist das eine Anweisung, eine Sammlung zu erstellen.
Sie können dies auch als Erstellung einer Suche ausdrücken:
- POST zu
domain/Jobs/Search/
oder (wie von burninggramma unten vorgeschlagen)
- POST zu
domain/JobSearch/
Semantisch mag es sinnvoll erscheinen, aber Sie erstellen eigentlich nichts, Sie fordern Daten an.
Semantisch ist es also ein GET , aber es wird nicht garantiert , dass GET das unterstützt, was Sie brauchen.
Die Frage ist also: Versuchen Sie, das REST-konforme Design so gut wie möglich beizubehalten, und stellen Sie dabei sicher, dass ich mich an die Einschränkungen von HTTP halte. Welches Design eignet sich am besten für eine Suche?
domain/Jobs?keyword={keyword}
. Das funktioniert gut für mich :) Ich hoffe, dass dasSEARCH
Verb zum Standard wird. programmers.stackexchange.com/questions/233158/…