Verwaltung von Callback-URLs von Onlinediensten
Why
(erstellt im Zusammenhang mit #1582 und #1577)
Die Callback-URL des Initiators/Onlinedienstes wird aus der letzten Submission vom Case gelesen (siehe CallbackService#getCallbackForNewReply
).
Das bedeutet, dass diese URL innerhalb des Case-Lifecycles geändert werden kann, sofern der Initiator eine neue Submission sendet.
Dass die Änderbarkeit existiert ist sicher positiv, dennoch funktioniert das Ganze sehr implizit und muss zumindest gut dokumentiert sein,
was bisher nicht der Fall ist. Es ergibt sich außerdem der Fallstrick, dass Initiators die Callback-URL nur bei der ersten
Submission senden könnten und damit ihre Callbacks unbewusst wieder abgestellt hätten.
Ebenso ist nachteilig, dass nur durch Senden einer neuen Submission der Callback geändert werden kann, weil es sein kann,
dass eine Callback-URL geändert werden muss, ohne dass es fachliche Neuerungen gibt.
API-Erweiterung
Ein möglicher Lösungsansatz wäre das Callback als Subresource am Case anzubieten mit (URL, Secret). Der Callback würde nur für den Zustelldienst lesbar sein, denn nur dieser nutzt aktuell die Onlineservice Callbacks. Idee:
http put /v1/cases/<caseId>/callback
{
"url": "https://hundesteuer.de/callback/<caseId>",
"secret": "very-secure"
}
und
http delete /v1/cases/<caseId>/callback
Persistenz-Überarbeitung
Lösungsvorschlag:
- Persistieren des Callbacks am Case.
- Weitere Submissions aktualisieren den Callback des Cases, aber nur, wenn das Objekt auch gesetzt ist. Ein fehlendes Callback-Objekt lässt einen bestehenden Callback unverändert.
- Entfernen des Callbacks aus der Submission.
- Migration bestehender Callbacks von der Submission an den Case.
- Der Zustelldienst nutzt den Callback des Cases statt dem der letzten Submission für Notifications.
Bewertung: Das Verhalten des Zustelldienst (der einzige der aktuell die Callbacks des Onlineservices nutzt) bzgl. der Datenhaltung der Callbacks ändert sich etwas, da wir nur noch ein Callback haben (am Case) und nicht mehr in jeder Submission. Die API bleibt insofern allerdings gleich, es ist eine reine Persistenzänderung.
Acceptance criteria
- Die Lösungsvorschläge wurden noch einmal gründlich geprüft.
- Der zusätzliche PUT-Endpunkt zum Ändern des Callbacks eines Cases ist implementiert.
- Der zusätzliche DELETE-Endpunkt zum Entfernen des Callbacks eines Cases ist implementiert.
-
Callbacks werden nicht mehr über die
submissions
-Tabelle referenziert, sondern nur noch übercases
. - Callback-Versenden für historische Einträge funktioniert weiterhin.
- Es ist weiterhin möglich, Callbacks über Submissions initial zu setzen oder zu aktualisieren.
- Ein fehlendes Callback-Objekt in einer Submissions entfernt den Callback nicht mehr.
Implementation plan (to be completed by the developer)
- ...
- ...
- ...
- Definition of Done was checked.