Ich versuche, eine API zu erstellen, die REST-Best-Practices folgt, intuitiv ist und Übereinstimmungen mit den Mustern, die Entwickler von anderen (gut gestalteten) APIs sehen. Ich glaube, dass ich die verschiedene Mapping der HTTP-Verben zu den typischen Ressourcen zu verstehen, die mit den Antworten in diesen beiden Fragen in Zeile ist:Handle CRUD in REST API Wenn Read benötigt ein POST
Which HTTP methods match up to which CRUD methods?
Understanding REST: Verbs, error codes, and authentication
Wo ich Probleme habe, ist, dass Aufgrund der Art unseres Geschäfts und der zum Abrufen von Daten erforderlichen Daten, die normalerweise ein GET wären, müssen wir einen POST verwenden. Dies liegt sowohl an der Größe der Anfrage als auch daran, was wir weitergeben, um die Suche durchzuführen.
When do you use POST and when do you use GET?
Also, es gibt ein paar Ansätze ich auf denken, wie CRUD am besten handhaben, und ich habe die Liebe einige Vorschläge:
- Verwenden Abfrageparameter in der POST für CREATE differenzier vs READ, andere Verben als normal. Ich mag diese Idee nicht.
- Haben Sie einen separaten Endpunkt für jede Aktion, z./baseUrl/lookup,/baseUrl/create. Folgt nicht dem richtigen Muster der Verwendung von Substantiven anstelle von Verben.
EDIT: Im Interesse der Klarheit, das erfundene Beispiel in meinen Kommentaren eines Bild Lookup-Service, wo ein Anrufer suchen, wenn ein Bild bereits in der Datenbank vorhanden ist, um ein neues Bild hinzufügen, aktualisieren Sie das Bild (zB Metadaten hinzufügen) oder löschen Sie das Bild.
Erstellen:Was sollen wir hier tun? POST/image/Erstellen und aktualisieren Sie den Lese-Endpunkt nach/image/search?
lesen: POST/Bild {imagedata = someBase64EncodedImage}
Update: PUT/image/{imageId}
Löschen: DELETE/image/{imageId}
Wir brauchen ein eher bodenständiges Beispiel. Das heißt, das Problem, POST zu verwenden, wenn GET offensichtlich ist, klingt wie Sie eine Liste einer Ressource mit expliziten Informationen in der Abfragezeichenfolge (Zeug wie IDs) abrufen, die mit Paginierung – JSelser
Als ein Beispiel für etwas Ähnliches gelöst wird, lassen Sie uns sagen Sie die Google Reverse Image Suche, obwohl es in unserem Fall nur das beste Spiel zurückgibt. Sie müssen also ein Bild POST einreichen, um zu sehen, ob es ein Bild gibt, das sehr nah ist (innerhalb eines Grenzwerts), sonst wird nichts zurückgegeben. Sie können auch ein Bild zu der Datenbank hinzufügen, das zu einem späteren Zeitpunkt abgerufen werden soll. IT ist nicht wirklich ein Problem der Seitenumbruch, oder zu viele Daten zurückgegeben werden. Es ist unordentlich, POST sowohl für die Erstellung als auch für den Abruf zu verwenden. – Matt
Sie können Ihre Frage mit einem Beispiel aktualisieren, das Ihrem Problem am ähnlichsten ist, um bessere Antworten zu erhalten. Insbesondere kann ich nicht ausschließen, welches deine Ressource durch Kontext ist, sind es dann Bilder? – JSelser