Hopp til innhold
  • Kategorier
  • Emneord
  • Siste
  • Populære
Lukk
Datalandsbyen logo
  1. Hjem
  2. Tips og spørsmål
  3. Bruke API med rate-limiting

Bruke API med rate-limiting

scheduled pinned locked moved Tips og spørsmål
3 Innlegg 2 Innlegg 4.0k Visninger 1 Følger
  • oldest-to-newest
  • newest-to-oldest
  • most-votes
reply
  • reply-as-topic
guest-login-reply
deleted-message
  • L Frakoblet
    L Frakoblet
    livar.bergheim
    topic:wrote-on, /post/400, 2022-04-04T17:05:05.288Z Sist endret av
    #1

    Har du tips til korleis bruke eller sette opp integrasjonar mot API som har begrensing på kor mange kall du kan gjere mot API-et («rate-limiting»)?
    Er det spesielle klient-bibliotek eller rammeverk som gjer jobben for deg, eller må du manuelt kode logikken for å handtere dette?

    Det har nyleg blitt aktuelt sidan vi i Digdir vart nødt til å innføre rate-limiting på Datahotellet, og det er også andre API-er som har dette.

    one-reply-to-this-post last-reply-time
    0
    • topic:user-referenced-topic-on, L livar.bergheim, /post/401,
    • ? Frakoblet
      ? Frakoblet
      En tidligere bruker
      topic:wrote-on, /post/411, 2022-04-12T19:37:13.341Z Sist endret av
      #2

      Det kommer helt an på typen endepunkt, brukstilfellet og klienten. Fra klientsiden må det alltid tas høyde for rate limiting på en eller annen måte, for eksempel ved å vise en feilmelding. Klienten må også ta høyde for cache-headere for å ikke sende forespørsler til data som allerede er lastet ned.

      Rate limiting er ment å begrense misbruk fra klientsiden, så man bør ta høyde for alle «godsinnede» klienter og skalere for all legitim bruk. Det er viktig å unngå at rate limiting ikke hindrer legitim bruk.

      Det gir ofte mening å skille på typen data og hvor ofte den oppdateres, og å bruke en cache eller CDN for å avlaste back-end hvis forespørslene gjelder forhåndsgenerert data.

      L one-reply-to-this-post last-reply-time
      0
      • ? En tidligere bruker

        Det kommer helt an på typen endepunkt, brukstilfellet og klienten. Fra klientsiden må det alltid tas høyde for rate limiting på en eller annen måte, for eksempel ved å vise en feilmelding. Klienten må også ta høyde for cache-headere for å ikke sende forespørsler til data som allerede er lastet ned.

        Rate limiting er ment å begrense misbruk fra klientsiden, så man bør ta høyde for alle «godsinnede» klienter og skalere for all legitim bruk. Det er viktig å unngå at rate limiting ikke hindrer legitim bruk.

        Det gir ofte mening å skille på typen data og hvor ofte den oppdateres, og å bruke en cache eller CDN for å avlaste back-end hvis forespørslene gjelder forhåndsgenerert data.

        L Frakoblet
        L Frakoblet
        livar.bergheim
        topic:wrote-on, /post/682, 2023-03-10T09:59:02.007Z Sist endret av
        #3

        @leo-valen Takk for tipsa. Tenker konkret på kun korleis handtere rate-limiting. Å lage klientar som respektere cache-headerar (til dømes ETag) kan vi setje som premiss.

        La oss seie at ein skal gjere 10 kall mot hotell.difi.no.
        Dersom ein fyrer av alle kalla i eit jafs, går ein over grensa på 5 forespørslar i sekundet, og ein får feilmelding på halvparten og ein sit igjen med berre deler av dataene.
        Ein (for) enkel måte å handtere dette er å automatisk prøve på nytt dersom ein får feilkode 429 (HTTP-statuskode «Too many requests») tilbake. Det fører til mange mislykka kall før ein kjem i mål med alle 10 kalla. For serveren er det langt mindre belastande å avvise for mange kall enn om serveren ikkje hadde hatt rate-limiting og måtte handtere mange kall i eit jafs. Det blir likevel ein del unødige kall med denne framgangsmåten.

        Fann ein artikkel som går igjennom ulike strategiar for å handtere dette:
        https://www.useanvil.com/blog/engineering/throttling-and-consuming-apis-with-429-rate-limits/

        Grunnen til det opprinnelege spørsmålet er behovet for ein som utviklar å sleppe å forhalde seg til kompleksiteten med å handtere dette. Ideelt sett vil ein ha eit bibliotek som hjelper med dette slik at ein i koden berre kan oppgje kva kall som skal gjerast, og så handterer biblioteket rate-limiting og svar tilbake.

        Alternativ: laste ned heile datasettet
        I tilfellet med datahotellet, får ein ut data med 100 rader pr. API-kall (paginering). Dersom ein vil hente ein stor del av datasettet, og datasettet ikkje er så stort, bør ein vurdere å heller hente ned heile datasettet. Er det f.eks. under 20 MB, så kan det fungere fint å hente ned også i klientside-kode som køyrer i nettlesaren til sluttbrukaren. Å laste ned heile datasettet i eitt kall er kun tilgjengeleg i CSV-format.

        Gjorde dette sjølv for eit par år sidan i eit hobbyprosjekt (søk på «$.csv»). Riktignok eit eldre programvarebibliotek (jQuery-plugin). Det fungerte svært bra. Nettlesaren handterte då cache-mekansimen (ETag) slik at datasettet (ca. 5 MB) ikkje vart lasta ned på nytt med mindre det var ein ny versjon av datasettet.

        one-reply-to-this-post last-reply-time
        0

        Hei! Det ser ut til at du er interessert i denne tråden, men du er ikke innlogget.

        Lei av å måtte skrolle gjennom de samme innleggene hver gang du besøker siden? Når du er innlogget, kommer du alltid tilbake til nøyaktig der du var sist, og du kan velge å bli varslet om nye svar (via e-post eller push-varsel). Du kan også lagre bokmerker og gi tommel opp til innlegg for å vise andre i fellesskapet at du setter pris på bidragene deres.

        Med ditt bidrag kan denne tråden bli enda bedre 💗

        Registrer Logg inn
        reply
        • reply-as-topic
        guest-login-reply
        • oldest-to-newest
        • newest-to-oldest
        • most-votes


        • Data.norge.no
        • Kontakt oss
        • Samtykke og brukervilkår
        • Tilgjengelighetserklæring
        • Personvernerklæring
        • Informasjonskapsler
        • github logoFølg oss på Github
        • Logg inn

        • Logg inn eller registrer deg for å søke.
        • first-post
          last-post
        0
        • Kategorier
        • Emneord
        • Siste
        • Populære