Gå til hovedinnhold

Opp- og nedlasting av filer

info

Se også tilsvarende dokument for GraphQL-konsumenter.

Her beskriver vi i korte trekk flyten en produsent må levere for opp- og nedlasting av filer. I dag gjør vi dette på flere forskjellige måter avhengig av forventet bruk og størrelse på filer.

base64-enkodet data i GraphQL

I de enkleste tilfellene vil filer kunne lastes opp og ned som base64-enkodet data. Denne dataen vil da typisk lagres i databaselaget.

Eksponering av signerte URL'er til klient

Denne flyten er basert på fremgangsmåte #1 fra "best practise" for filopplasting av Apollo. Her lastes filer opp i et tredje-parts objektlager slik som Amazon S3. Følgende figur skisserer i grove trekk hvordan denne flyten ser ut:

Skisse-for-flyten

Opplasting

1. Forespørsel om opplastings-URL

Klienten sender en forespørsel til GraphQL-API'et for å få en signert opplastings-URL for en spesifikk fil. Forespørselen må inneholde blant annet:

  • Filnavn
  • Checksum
  • Content-Type
  • Content-Length

API'et må nå generere en unik nøkkel for dokumentet som senere skal brukes for verifisering. API'et må videre kommunisere med objektlager for å få generert signert opplastings-URL. For Amazon S3 kan det f.eks. gjøres slik AWS dokumenterer her. API'et svarer deretter med verifiserings-ID, signert URL og nødvendige headere som må brukes under opplastingen.

Merk at URL'er typisk bare bør være gyldig i 10 minutter.

2. Klienten laster opp fil med PUT

Klienten kan nå laste opp filen direkte mot den signerte URL'en med HTTP PUT.

3. Klienten sender bekreftelses-forespørsel til API'et

Etter at filen er lastet opp må klienten sende en ny forespørsel til API'et for å verifisere at filen er riktig opplastet og registrert. Klienten sender da med verifiserings-ID'en. API'et må deretter sjekke at ID'en stemmer samt at filen er riktig lastet opp. Med S3 vil slik validering innebære å hente og validere ETag fra S3, ettersom S3 ikke alltid lagrer checksum eksplisitt.

Nedlasting

Denne flyten er i praksis den samme, bare enklere, ettersom man ikke trenger et tredje bekreftelses-steg. Merk at API'et kan kontrollere Content-Disposition gjennom svaret på forespørsel om nedlastings-URL for å tilpasse brukeropplevelsen gjennom for eksempel å sørge for skjult nedlasting i bakgrunnen.