REST API "Too many requests"
-
Hallo Zusammen,
wir haben einen cron job, der den Veranstaltungsort anhand der gebuchten Ressourcen ergänzt/setzt.
Wenn wir den cron job nun für die nächsten 366 Tage (Schaljahr lafen lassen, dann kommt vereinzelt mal die Fehlermeldung"Too many requests"
Ist das Limit irgendwo dokumentiert und wie wir unterhalb dieser Schwelle bleiben können?
-
Es kommt der Status Code 429 zurück. Wenn der kommt weiß man, dass man etwas warten muss um weitere Requests zu machen.
Man könnte die Implementierung also z.b. so machen, dass man bei einem 429 60 Sekunden wartet und dann den Request nochmal macht.Aktuell erlauben wir 600 Requests pro Minute pro IP. Das kann sich aber zukünftig auch noch verringern.
Um das zu erreichen scheint ihr schon recht viele Requests zu machen. Vielleicht lassen sich die Anfragen auch noch optimieren.
-
@davidschilling
Ok, wäre gut wenn irgendwo die limits stehen würden und auch was für eine Retryzeit Sinn macht.Bei uns ist das normalerweise kein Problem, ausser wir müssen den CRON Trigger wegen updates über allle Einträge laufen lassen.
Aber wir müssen halt schon alle Kalendereinträge des nächsten Jahres nach Veränderungen Abklappern...Was von seiten Churchtool zum vermeinden solcher Themen machen könntet :
Sicher mal das hier, dann müssen wir nicht mehr pollen:
https://forum.church.tools/topic/9712/webhooks-implementierenUnd der hier, da könnte man direkt mindestens die EventID zurückgeben.
Ressourcen wären auch schön, aber hier haben wir das grundsätzliche REST Problem mit dem Over-/Underfetchhttps://forum.church.tools/topic/9859/api-endpoint-für-verknüpfung-zwischen-calendar-appointment-und-event
https://forum.church.tools/topic/9747/gebuchte-ressourcen-via-rest-api-zu-kalendereintrag-erhalten -
@aschild Was passiert denn bei diesem Cron Trigger. Wodurch werden diese vielen Anfragen gemacht? Vielleicht gibt es ja schon bessere Möglichkeiten die Api zu nutzen.
Der Forenbeitrag zur Termin und Events Verknüpfung scheint mir vor Allem Verständnisfragen zu enthalten, die geklärt wurden. Was wäre da noch der Verbesserungsvorschlag?
Der Forenbeitrag zu den Ressourcen sieht für mich ähnlich aus. Auch da die Frage was wir da verbessern könnten?
-
@davidschilling Im cron trigger passiert folgendes:
- Es klappert alle Kalendereinträge aus allen Gemeindekalendern für die nächsten 400 Tage ab.
- Dann geht es jeden Eintrag durch und schaut ob sich Text/Daten/Bild/Location/Eventsachen zu dem Eintrag gegenüber dem Eintrag auf der öffentlichen Webseite verändert haben.
- Wenn der Eintrag nicht gefunden wird oder er in Churchtool verändert wurde, dann wird die Webseite nachgeführt
- Auf der Clientseite führen wir auch eine Mappingtabelle zwischen Webseiteneintrag und CT-Kalendereintrag um in CT entfernte Kalenereinträge auch auf der Webseite löschen zu können
Wie gesagt, eigentlich könnte man das ganz gezielt für einen einzelnen Eintrag machen, wenn denn CT uns via Webhook über das Create/Update/Delete eines Eintrages informieren würde
https://github.com/a-schild/churchtools-wp-calendarsync/blob/main/churchtools-dosync.php
und das Resultat:
https://ref-nidau.ch/alleanlaesse/ -
@aschild sowas ähnliches machen wir auch - nur bei weiterm nicht so schön wir ihr (https://www.bruedergemeinde-korntal.de/neuigkeiten/termine.html?month=202312)
Ich habe neulich unseren Importer umgestellt, dass er das ganze mit 5 requests hinbekommt, egal wieviele Termine wir holen.
Früher hab ich die auch einzeln abgeklappert ....
du kannst in den event masterdata, den calendars/$calendarId/appointments, und den Events alles abgreifen, was du brauchst.
Ich habe mein Script nicht in github - es ist nicht allgemein verwendbar, weil es contao-Events erzeugt.
-
@aschild Was du beschreibst kannst du mit insgesamt 2 Requests machen.
- Request alle Termine für die nächsten 400 Tage abholen.
- Request alle Events für die nächsten 400 Tage abholen.
Dann musst du nur die Events und Termine im Client matchen.
-
@davidschilling Hmmm...
da sehe ich jetzt gerade nicht wie das funktionieren soll.Im /calendars/appointments fehlen mir die Ressourcen
Im /calendars/{id}/appointsments hier auch