[Microsoft graph] Inhoud bestanden in batch

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • N0a
  • Registratie: Februari 2021
  • Laatst online: 17:09
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:
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:
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.
Ik wou dit ergens bevestigd zien op de website van Microsoft maar de link naar de "Known issues" geeft een blanco pagina.

Beste antwoord (via N0a op 22-04-2024 16:09)


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 02:13
Een 302 is een redirect en dus geen error (400/500 range zijn waar de errors zitten). Deze response is ook conform de documentatie (https://learn.microsoft.c...=graph-rest-1.0&tabs=http).

Tijdens een "losse" request zulken de meeste http libraries bij een 302 automatisch een redirect doen. In het geval van de batch api bij Graph zul je dus zelf een request moeten doen bij deze urls: in dit geval zal de batch api dus weinig voordeel opleveren (sowieso voorkomt het gebruik van de batch API geen throttling op Graph, been there/done that met 429s in de batch response).

Overigens is chatGPT gebruiken om je mening te bevestigen niet aan te raden: aangezien het een language model is en geen magisch orakel zal deze afhankelijk van hoe je de vraag stelt namelijk meestal jouw mening bevestigen.

[ Voor 3% gewijzigd door Killah_Priest op 22-04-2024 15:31 ]

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 02:13
Een 302 is een redirect en dus geen error (400/500 range zijn waar de errors zitten). Deze response is ook conform de documentatie (https://learn.microsoft.c...=graph-rest-1.0&tabs=http).

Tijdens een "losse" request zulken de meeste http libraries bij een 302 automatisch een redirect doen. In het geval van de batch api bij Graph zul je dus zelf een request moeten doen bij deze urls: in dit geval zal de batch api dus weinig voordeel opleveren (sowieso voorkomt het gebruik van de batch API geen throttling op Graph, been there/done that met 429s in de batch response).

Overigens is chatGPT gebruiken om je mening te bevestigen niet aan te raden: aangezien het een language model is en geen magisch orakel zal deze afhankelijk van hoe je de vraag stelt namelijk meestal jouw mening bevestigen.

[ Voor 3% gewijzigd door Killah_Priest op 22-04-2024 15:31 ]


Acties:
  • 0 Henk 'm!

  • N0a
  • Registratie: Februari 2021
  • Laatst online: 17:09
Beste,

Dankjewel voor jouw feedback hier kan ik zeker mee aan de slag!

Bedankt!