Ungelöst PATCH /api/groups/{groupdId}/members/{personId}
-
Ich habe über die Rest-API
PUT /api/groups/{groupdId}/members/{personId}erfolgreich verwendet. Jedoch bekam ich dann eine E-Mail in der stand, dass dieser Request deprecated sei. In der API-Doku liest man nichts davon. Wie dem auch sei, habe ich die EmpfehlungPATCH /api/groups/{groupdId}/members/{personId}stattdessen probiert. Dort erhalte ich aberError: 404 - {"message":"DoctrineGroupMember [gid, pid] not found.","translatedMessage":"Objekt DoctrineGroupMember[gid, pid] wurde nicht gefunden.","messageKey":"error.notfound","args":{"model":"DoctrineGroupMember","id":"gid, pid"},"errors":[]}Dabei steht in der Nachricht gid für die übermittelte
groupdIdund pid für die übermitteltepersonId.Was mache ich falsch?
-
@JJB PUT sollte nur zum Anlegen genutzt werden, PATCH zum Updaten. Vermutlich hast du PATCH zum anlegen verwendet.
-
@jziegeler Vielen Dank für die Info. Tatsächlich wollte ich PUT auch nur zum Anlegen verwenden. Ausversehen hatte ich bestimmten Code noch einmal nach dem Anlegen ausgeführt. Das war also das Problem, nicht das initiale Anlegen.
Wie kommt es dann, dass
PUT /finance/transactions/{id}zum Update gedacht ist? Wäre hier nicht auch PATCH angebrachter? Das gibt es aber laut Doku nicht. -
@JJB PUT ist generell schon auch zum Update gedacht, muss halt aber immer das gesamte Objekt mitschicken. Bei den membern gibt es ein bisschen Logik um das eintrittsdatum herum, die das in diesem Fall erschwert, insofern war es hier sinnvoller für uns nur mit dem PATCH für ein Update zu arbeiten
-
J jziegeler has marked this topic as solved on
-
@jziegeler Ich habe noch eine Rückfrage zu
PUT /finance/transactions/{id}. Was ist denn hier best practice, wenn man nur ein Feld aktualisieren möchte?Ich dachte, es sei sinnvoll, erst einmal alle Felder über get zu holen, in dem Ergebnis das eine Feld anzupassen und dann über put wieder alles zurück. Das Problem dabei, ich schicke dann auch einiges zurück, was eigentlich gar nicht explizit geändert werden kann, zum Beispiel Metadaten:
'meta': {'createdDate': '2025-09-07T06:19:54Z', 'createdPerson': {'id': 1}, 'modifiedDate': '2025-09-07T06:19:54Z', 'modifiedPerson': {'id': 1}}, 'permissions': {'canEdit': True}, '0': {'@deprecated': {'donatorId': 'donator', 'donatorSpouseId': 'donatorSpouse'}}}Darüber hinaus bekommt man bei dem Verfahren manchmal eine Fehlermeldung zu lesen:
Error: 400 - {"message":"There are validation errors","messageKey":"validation.error","translatedMessage":"Die eingegebenen Daten waren nicht korrekt.","args":[],"errors":[{"fieldId":"contraAccountId","message":"Das Gegenkonto ist kein Spendenkonto.","messageKey":"validation.constraint.donation.no.donation.account","args":[]}]}Dabei habe ich das hier rausgeschickt (genau so habe ich es ja auch bekommen):
'donatorId': None, 'donator': None, 'donatorSpouseId': None, 'donatorSpouse': NoneWie gestaltet man also sinnvoll ein Update eines Transaktionsfeldes?
-
J JJB has marked this topic as unsolved on
-
Dieser Beitrag wurde gelöscht! -
@JJB Wenn es nur eine PUT und keine PATCH Api gibt musst du alle Felder mitschicken die es beim Updaten gibt. Welche das sind ist in Api Dokumentation in deiner Installation unter /api definiert.
Beim
GETgeben wir häufig mehr Informationen zurück um das anzeigen von Informationen zu vereinfachen. Am saubersten ist es den Request-Body einzeln zusammenzubauen und nicht einfach den aus dem GET bekommenen Body mitzuschicken.Zu deiner Fehlermeldung:
Wenn du einen Spender mitschickst muss deine Buchung auch eine Spende sein. Das macht sich daran fest, dass das Gegenkonto ein Spendenkonto ist. Das ist vermutlich in deinem Request nicht so.
-
J jziegeler has marked this topic as solved on
-
@davidschilling Beim Selbstzusammenbauen der Felder des
PUT-Befehls laufe ich Gefahr, ein Feld zu vergessen und damit Informationen aus meiner Buchung wegzulöschen. Dieses Risiko möchte ich nicht eingehen. Die Dokumentation der API nennt übrigens nicht die vollständige Liste der Felder (zumindest nicht unter/finance/splittransactions/{id}). Da habe ich bereits vor dem Erstellen dieses Threads geguckt. Gucke ich an der falschen Stelle? Und selbst wenn ich alle Felder auf anderem Wege fände, die aktuell mitgeschickt und berücksichtigt werden können, so liefe ich dennoch Gefahr, beim nächsten Update von CT von einem neuen Feld zu spät mitzubekommen und zack überschreibe ich automatisiert neuen Informationen. Das ist doch keine gute Lösung!Und ja, es ist richtig, dass kein Spendenkonto in meiner Buchung involviert ist (es handelt sich um keine Spende). Bei
GETbekomme ich aber dennoch'donatorId': Nonezurück, statt das das Feld einfach fehlt. Insofern erwarte ich doch von der API, dass das Mitschicken von'donatorId': Nonebei einer Nichtspende auch gestattet ist.Gelöst habe ich das Problem für mich nun übrigens folgendermaßen: Über
GEThole ich mir erst einmal alles und schmeiße dort nur'donatorId': Noneraus und schicke den Rest inklusive der Updates, die ich fahren möchte, alsPUTwieder zurück. Das funktioniert soweit, auch wenn viele andere spendenbezogene Felder und nicht editierbare Felder mitgeschickt werden. -
J JJB has marked this topic as unsolved