Ich arbeite am Entwerfen einer Ressource für diesen Dienst, die eine Reihe von veränderbaren Eigenschaften und eine Reihe von unveränderlichen (z. B. status
, die vom Dienst generiert wird und nicht etwas, das der Client ändern kann) hat.Wie sollte ein RESTful-Service schreibgeschützte Eigenschaften auf änderbaren Ressourcen verfügbar machen?
Ich muss dies in Antworten auf GET
Anfragen für die Ressource enthalten, aber bin mir nicht sicher, was zu tun ist, wenn jemand dann die Ressource mit einer PUT
Anfrage sendet.
Das Erzwingen des Anrufers zu wissen, welche Eigenschaften unveränderlich sind, fühlt sich falsch an, aber stillschweigend verwerfen Aktualisierungen fühlen sich auch falsch. Die Antwort mit der aktualisierten Ressource auf die Anfrage PUT
könnte das Problem lösen, aber es ist unvollkommen, da der Anrufer keine Diff seiner Anfrage und die Antwort des Dienstes machen sollte, um herauszufinden, ob eine Eigenschaft akzeptiert wurde.
Irgendwelche Gedanken auf dem richtigen Weg?
P.S. Ich schaute auf How should I update a REST resource?, aber es ist anders als diese Frage und fördert eine übermäßig gesprächige API-Design.
Ich denke, das ist wahrscheinlich der Weg zu gehen: Wenn sie versuchen, die unveränderliche Eigenschaft zu ändern, dann ist es ein 409; Wenn sie es in Ruhe lassen, nehmen wir es von ihnen zurück und legen es still weg. Der Endstatus entspricht ihren Erwartungen und die Eigenschaft bleibt schreibgeschützt. – ehdv