Ich erstelle einen WCF-Webservice mit WcF-Authentifizierungsdienst und die erste Reihe von Funktionen, die ich brauche, ist die Verwaltung eines Posteingangs für einen Client. Der Client wird durch die Authentifizierung bestimmt.
Dies ist mein Versuch eines RESTful-Designs der API:
https://api.mydomain.com/v1/inbox/messages (GET)
Gibt eine Seite mit Ergebnissen im Posteingang zurück, auf die ein optionaler Suchfilter angewendet wurde
https://api.mydomain.com/v1/inbox/mark (POST)
Markiert eine oder mehrere gelesene oder ungelesene Nachrichten
https://api.mydomain.com/v1/inbox/archive (POST)
Archiviert eine oder mehrere Nachrichten
Mache ich das richtig? Wenn nicht, was wäre eine bessere Möglichkeit, diese Schnittstelle zu entwerfen?
Martin Fowler hat eine gute Zusammenfassung des Richardson Maturity Models und was es braucht, um einen RESTful Service zu machen. Jan verwies auf einen Beitrag von Roy Fielding, aber neben Hypermedia (und HATEOAS ) gibt es auch einige Schritte.
In Bezug auf das Richardson-Modell würde ich denken, dass Ihre API einige Änderungen benötigen würde, um zu "Level 3" ( Duh Duh Duhhhh). Die /v1/inbox/messages
-Auflistung sieht gut aus, und nur die Unterstützung von GET
zeigt an, dass es sich um eine schreibgeschützte Ressource für den Benutzer handelt. % Co_de% ing Aktionen und IDs für POST
und /v1/inbox/mark
ist jedoch nur das Tunneln von RPC-ähnlichen Diensten über HTTP - "Level 0" im Artikel .
Ich würde etwas wie das Folgende als eine naive, nicht hypermediale (d. h. "Stufe 2") API vorschlagen:
Um eine Liste von Zusammenfassungsinformationen aller Nachrichten (in allen Ordnern) abzurufen:
%Vor%Antwort:
%Vor%Um eine vollständige Nachricht abzurufen:
%Vor%Antwort:
%Vor%Um eine Nachricht zu bearbeiten (z. B. um sie als gelesen zu markieren und in den Archivordner zu verschieben):
%Vor% Hinweis: Hier verwende ich absichtlich /v1/inbox/archive
anstelle von POST
, um eine teilweise Aktualisierung anzuzeigen.
Andere Dinge, die Aufmerksamkeit erfordern, sind:
Hypermedia-Antworten und Medientypen Ehrlich gesagt, wird dies besser von anderen erklärt (zB das REST In Practice Buch oder das InfoQ Coffee Cup-Beispiel von den gleichen Autoren), aber kurz gesagt sollten Ihre Antworten dem Kunden anzeigen, welche anderen Aktionen aus der Antwort möglich sein könnten zu ihrer letzten Anfrage und erlauben ihnen, die gesamte API von nur einer einzigen URI zu entdecken. Als ein Beispiel gibt es eine Implikation von Ordnersammlungen oben. Wenn PUT
zurückgegeben wird:
Dann würde der Client ein konkretes Beispiel für einen URI haben, um GET /v1/messages/1234
zu testen, und eine gute Idee von dem, was da sein könnte.
Antwortcodes und Inhalt: OPTIONS
ist offensichtlich. Reagieren Sie mit 200 OK
, wenn der Benutzer nicht berechtigt ist, eine bestimmte Nachricht anzuzeigen, 403 Forbidden
, wenn die Nachrichten-ID nicht vorhanden ist. Jedes Mal, wenn Sie einen Fehler zurückgeben, geben Sie dem Kunden einige Hinweise, wie er seine Anfrage korrigieren kann (wenn überhaupt möglich).
Betreffend gelesen / ungelesenen Teil Ich glaube nicht, dass du einen Posten brauchst. Ich denke du brauchst Put-Methode Ссылка https://api.mydomain.com/v1/inbox/messageId/Unread
Beitrag beim Erstellen eines neuen Datensatzes benötigt und Sie möchten
aktualisierenFür den Archivteil stimme ich zu. Denken Sie daran, das Ergebnis für den Archivierungsprozess zurückzugeben.
Tags und Links wcf api restful-authentication rest