Mijn vraag
Ik ben momenteel aan de slag voor het herschrijven van een C# project naar een Python-toepassing die gestructureerde financiële tekstbestanden (CODA) verwerkt. In deze bestandjes wordt een stukje tekst uitgelezen (het rekeningnummer) en op basis van dit rekeningnummer gaat het bestand naar een bepaalde locatie.
Deze bestanden staan in het nieuwe project in Microsoft Teams opgeslagen. Via de Microsoft Graph API lukt het prima om de bestanden op te vragen en uit te lezen. Momenteel doe ik per bestandje een call richting de servers van Microsoft om de inhoud van dat bestandje te ontvangen.
Ik las echter in de documentatie dat er zo iets bestaat als batching. Het leek mij dan ook handig om zo min mogelijk calls richting de server te laten gaan en de inhoud van de bestanden op te vragen in "batchjes" van 20 requests (conform documentatie Microsoft).
De documentatie (hier terug te vinden) lijkt mij wel met humor geschreven. Zo gaat in het voorbeeld een request voor een bestand richting de server:
Maar de response in datzelfde voorbeeld geeft onderstaande "error" (HTTP 302):
Dit is ook waar ik tegenaan loop bij mijn batch-opdrachten met name status 302. Doe ik dezelfde request richting Microsoft buitenom batch gewoon simpele enkelvoudige request dan lukt het prima.
Mijn vraag in deze is tweeledig. Enerzijds informeren of het uberhaut mogelijk is om via batch bestandsinhoud op te vragen van bepaalde bestanden. Het batch opvragen van mappen en dergelijke lukt prima, net zoals de "children" van een bepaalde map. Het gaat hier concreet over de bestandsinhoud (content).
Anderzijds wil ik even polsen bij de meer ervaren mensen hier of via batch opvragen via Microsoft Graph van bestandsinhoud wel een goede piste is? Of ben ik beter dat ik mijn code dusdanig opbouw dat enkelvoudige requests met een bepaald interval richting de servers gaan van Microsoft en zo Throttling voorkom?
Dank voor het advies!
Relevante software en hardware die ik gebruik
Python en Microsoft Graph 1.0 API (Niet de SDK voor alle duidelijkheid)
Wat ik al gevonden of geprobeerd heb
Ik heb de documentatie erop nagelezen maar het voorbeeld dat daar gegeven wordt is identiek aan het probleem waar ik tegenaan bots. Volgens mij heeft het te maken met de headers die meegegeven worden. Ik gebruik voor mijn individuele calls de header "application/octet-stream" maar een batch opdracht wil met deze headers niet vertrekken vanop het systeem. Een error geeft aan na te gaan of mijn headers wel correct ingesteld staan. De headers "application/json" laten de opdracht prima vertrekken maar de content/body is leeg en in het gezelschap van een status 302. Vermoedelijk omdat de inhoud niet overeenstemt met wat terugkomt (verwacht wordt) van de server.
ChatGPT lijkt dat te bevestigen door aan te geven dat batchverwerking moeite hebben met het verwerven van binaire data:
Ik ben momenteel aan de slag voor het herschrijven van een C# project naar een Python-toepassing die gestructureerde financiële tekstbestanden (CODA) verwerkt. In deze bestandjes wordt een stukje tekst uitgelezen (het rekeningnummer) en op basis van dit rekeningnummer gaat het bestand naar een bepaalde locatie.
Deze bestanden staan in het nieuwe project in Microsoft Teams opgeslagen. Via de Microsoft Graph API lukt het prima om de bestanden op te vragen en uit te lezen. Momenteel doe ik per bestandje een call richting de servers van Microsoft om de inhoud van dat bestandje te ontvangen.
Ik las echter in de documentatie dat er zo iets bestaat als batching. Het leek mij dan ook handig om zo min mogelijk calls richting de server te laten gaan en de inhoud van de bestanden op te vragen in "batchjes" van 20 requests (conform documentatie Microsoft).
De documentatie (hier terug te vinden) lijkt mij wel met humor geschreven. Zo gaat in het voorbeeld een request voor een bestand richting de server:
code:
1
2
3
4
5
6
| "requests": [ { "id": "1", "method": "GET", "url": "/me/drive/root:/{file}:/content" }, |
Maar de response in datzelfde voorbeeld geeft onderstaande "error" (HTTP 302):
code:
1
2
3
4
5
6
7
8
| "responses": [ { "id": "1", "status": 302, "headers": { "location": "https://b0mpua-by3301.files.1drv.com/y23vmagahszhxzlcvhasdhasghasodfi" } }, |
Dit is ook waar ik tegenaan loop bij mijn batch-opdrachten met name status 302. Doe ik dezelfde request richting Microsoft buitenom batch gewoon simpele enkelvoudige request dan lukt het prima.
Mijn vraag in deze is tweeledig. Enerzijds informeren of het uberhaut mogelijk is om via batch bestandsinhoud op te vragen van bepaalde bestanden. Het batch opvragen van mappen en dergelijke lukt prima, net zoals de "children" van een bepaalde map. Het gaat hier concreet over de bestandsinhoud (content).
Anderzijds wil ik even polsen bij de meer ervaren mensen hier of via batch opvragen via Microsoft Graph van bestandsinhoud wel een goede piste is? Of ben ik beter dat ik mijn code dusdanig opbouw dat enkelvoudige requests met een bepaald interval richting de servers gaan van Microsoft en zo Throttling voorkom?
Dank voor het advies!
Relevante software en hardware die ik gebruik
Python en Microsoft Graph 1.0 API (Niet de SDK voor alle duidelijkheid)
Wat ik al gevonden of geprobeerd heb
Ik heb de documentatie erop nagelezen maar het voorbeeld dat daar gegeven wordt is identiek aan het probleem waar ik tegenaan bots. Volgens mij heeft het te maken met de headers die meegegeven worden. Ik gebruik voor mijn individuele calls de header "application/octet-stream" maar een batch opdracht wil met deze headers niet vertrekken vanop het systeem. Een error geeft aan na te gaan of mijn headers wel correct ingesteld staan. De headers "application/json" laten de opdracht prima vertrekken maar de content/body is leeg en in het gezelschap van een status 302. Vermoedelijk omdat de inhoud niet overeenstemt met wat terugkomt (verwacht wordt) van de server.
ChatGPT lijkt dat te bevestigen door aan te geven dat batchverwerking moeite hebben met het verwerven van binaire data:
Ik wou dit ergens bevestigd zien op de website van Microsoft maar de link naar de "Known issues" geeft een blanco pagina.Batch-beperkingen voor bestandsonderdelen: Microsoft Graph ondersteunt batching, maar het ophalen van inhoud van bestanden in batches heeft soms beperkingen. Hoewel je meerdere GET-aanvragen in één batch kunt uitvoeren, zijn er vaak beperkingen bij het ophalen van binaire gegevens (zoals bestandsonderdelen). Dit kan leiden tot fouten in het batchverzoek.