Ich möchte eine Funktion "Werte ändern" in meiner API implementieren. Angenommen, ich habe den folgenden REST-API-Aufruf:Kann eine REST-API-Repräsentation basierend auf einem If-Modified-Since-Header geändert werden?
GET /ws/school/7/student
Dies wird alle Schüler in der Schule # 7. Leider kann das viel sein. Also, ich möchte die API ändern, um nur die Studentenakten zurückzugeben, die seit einer bestimmten Zeit geändert worden sind. (Der Anwendungsfall ist, dass eine nächtliche Prozess von einem anderen System führt alle Studenten von meinem System zu ihnen zu ziehen.)
Ich sehe http://blog.mugunthkumar.com/articles/restful-api-server-doing-it-the-right-way-part-2/ empfiehlt die Verwendung der If-Modified-Since Header und eine Darstellung der Rückkehr wie folgt:
- Suche alle Schüler da die in der Header seit If-Modified-angeforderte Zeit aktualisiert
- wenn es welche gibt, kehren die Schüler mit einer 200 OK
- wenn es keine Studenten aus dieser Abfrage zurückgegeben, Rückkehr a 304 Nicht modifiziert
Ich verstehe, was er tun möchte, aber das scheint der falsche Weg zu gehen. Die Definition des If-Modified-Since-Header (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.24) sagen:
Die If-Modified-Since Anfrage-Header-Feld mit einem Verfahren verwendet wird, abhängig zu machen: wenn die angeforderte Variante ist seit dem nicht verändert Die in diesem Feld angegebene Zeit, eine Entität wird nicht vom Server zurückgegeben. Stattdessen wird eine Antwort 304 (nicht geändert) ohne Nachrichtentext zurückgegeben.
Das scheint mir falsch. Wir würden nicht die Repräsentation oder einen 304 wie vom RFC angegeben zurückgeben, sondern einen Hybrid. Es scheint so, als ob Client-seitiger Code (oder schlimmer noch, ein Web-Cache zwischen Server und Client) die Bedeutung falsch interpretiert und den lokal zwischengespeicherten Wert ersetzt, wenn er eigentlich nur aktualisiert werden sollte.
also zwei Fragen:
- Ist das eine korrekte Verwendung des Header?
- Wenn nicht (und ich vermute nicht), was ist die beste Praxis? Abfragezeichenfolgenparameter?
Vielen Dank für die Bestätigung, Bass-Mann. Das war genau mein Denken. – fool4jesus