2012-05-18 3 views
6

Ich möchte, dass meine API eine Nur-Validierungsanforderung hat. Zum Beispiel, wenn ich eine URL wie:RESTful-API: Welche Kombination aus METHODE/HEADER soll nur für die Validierung verwendet werden?

http://api.somesite.com/users/12345 

und der Benutzer wird auf einem Client eine Form von Informationen ausfüllen, dass ich schließlich PATCH/PUT/POST zu dieser Ressource. Wenn der Benutzer das Formular ausfüllt, möchte ich seine teilweise vollständig aktualisierte Repräsentation regelmäßig an den Server senden, damit ich die Echtzeitvalidierung ihrer Eingabe anzeigen kann (z. B. "Dieser Benutzername ist bereits vergeben", "Dieses Passwort lautet zu kurz").

Es gibt keine Standard-HTTP-Methode oder HEADER, die dieses Verhalten auf derselben Ressource zuzulassen scheint. Es scheint, meine Optionen sind:

  1. eine neue Validierung untergeordnete Ressource erstellen für
  2. Verwenden Sie einen benutzerdefinierten Header (x-somesite-Validierung-only) und PUT darauf hinweist, dass ich überprüfen möchten, aber nicht speichern
+0

Verwandte Frage: http : //stackoverflow.com/questions/8368931/how-should-i-design-a-restful-url-to-validate-an-object – suing

+0

Große Frage. Ich bin eben auch auf dieses Thema gestoßen und ich diskutiere zwischen genau denselben zwei Ansätzen. Ich stütze mich persönlich auf den Kopf. Inspiriert von gits "--dry-run" -Parameter in vielen seiner Befehle. –

Antwort

2

Einige Optionen

1) Verwenden Sie benutzerdefinierte Header
2) Legen Sie etwas in die Query-String wird mit Angabe nur
3) Use Aktion URl z \ IndividualClient \ 123 \ actions \ Validate \ Invoke {Abschnitt 19 hier http://restfulobjects.files.wordpress.com/2011/11/restful-objects-spec-052.pdf}
4) Hierarchische URL z. \ IndividualClient \ 123 \ Validierung

Von diesem post ich diesen Rat finden

Verwendung POST Sie, wenn Sie zu tun haben, etwas, das RPC-wie Do Verwendung GET für Dinge wie Berechnungen fühlt, es sei denn, Ihre Eingabe groß, in welchen Fall verwenden Sie POST

In Bezug auf Ihre spezifische Frage sollte POST für # 4 und # 5 verwendet werden. Diese Operationen fallen unter die oben genannte "RPC-ähnliche" Richtlinie. Beachten Sie bei # 5, dass POST nicht unbedingt> Content-Type verwenden muss: application/x-www-form-urlencoded. Dies könnte genauso einfach eine JSON- oder CSV-Nutzlast sein.

Hier ist, was ich unter Berücksichtigung

Dies ist das Add einer Ressource ist:
Benutzer/Validierung
POST
Anfrage: UserResource
Antwort: Validation
Response Codes 200, 400. 404.500

Dies ist die Aktualisierung einer Ressource
Benutzer/204/Validierung
POST
Anfrage: UserResource,
Antwort: Validation Response Codes 200, 400. 404. 500

+0

Ich endete damit, etwas sehr ähnliches zu implementieren, aber im Interesse, meinen Software-Router nicht neu zu schreiben, habe ich es nur Teil des Querystring gemacht: POST/user/204? Validate – Fleep

0

Thrid-Option wäre eine Validierungsfunktion auf dem Client zu implementieren. Diese Funktion würde dann spezifische Anfrage senden, wenn sie spezifische Informationen benötigt.

Zum Beispiel müssen Sie nicht wirklich eine Anfrage senden, um zu überprüfen, ob ein Passwort zu kurz ist. Sie können jedoch eine einzige Anfrage senden, um zu überprüfen, ob ein Benutzername existiert.

Dies ist, wie die Validierung mit Ajax getan wird, die btw RESTful API (HTTP) :)

+1

Ich würde argumentieren, dass AJAX notwendigerweise HTTP als Übertragungsprotokoll verwendet, aber nicht unbedingt RESTful-Praktiken als API * sinnvoll implementieren muss *. "Alles HTTP ist RESTful" zu sagen, vermisst den Punkt. – Fleep

+0

Auch werde ich auf der Server-Seite sowieso validieren, und im Interesse, mich nicht zu wiederholen, würde ich viel lieber in der Lage sein, meinen Validierungscode standardisiert und an einem einzigen Ort zu halten. Eine Echtzeitvalidierung, die die Benutzeroberfläche beeinflusst, wie die Kennwortprüfung, würde bei einer nichtkritischen Thin-Validierung auf der Clientseite gut funktionieren. Aber es ist kein Ersatz für das, was ich oben gefragt habe. – Fleep

+0

Das ist doppelt so viel Entwicklungsarbeit (d. H. Auf Client- und Serverseite). – Pierre

Verwandte Themen