GuideDrift
Hvordan klarer vi os med færre kald?
Hvert opslag tæller mod månedens kvote, så den billigste optimering er det kald, du aldrig laver. De fleste integrationer kan skære en stor del af forbruget væk uden at miste noget — ved at bruge de felter, svarene allerede har, og ved at lade være med at spørge om det samme to gange.
Kaldene i guiden
På denne side7 trin
Hvad der tæller
- Et almindeligt opslag tæller ét kald — også når svaret er
400eller404. Validér input, før du sender det. - Et
:batch-kald og en eksport tæller ét kald pr. unikt id. Dubletter tælles én gang. - Svar med
5xxog504lægges tilbage i kvoten, og en burst-429trækker intet. /v1/kodeliste/:navnkræver ingen nøgle og tæller ikke mod kvoten.
Den fulde opgørelse står under Rate limits og kvoter.
Søgefelter: debounce og afbryd
Et adressefelt, der kalder ved hvert tastetryk, bruger et kald pr. bogstav. Vent i stedet 150–250 ms efter sidste tastetryk, kald først fra to tegn — kortere giver alligevel 400 og koster et kald — og afbryd det forrige kald, når et nyt starter. SDK’et tager et signal på hvert kald, og et afbrudt kald kommer ud som en AbortError.
import { GrundfastClient } from '@grundfast/sdk';
const gf = new GrundfastClient({ apiKey: process.env.GRUNDFAST_API_KEY });
let timer: ReturnType<typeof setTimeout> | undefined;
let inflight: AbortController | undefined;
const cache = new Map<string, unknown>();
export function onInput(q: string, vis: (hits: unknown) => void) {
clearTimeout(timer);
const key = q.trim().toLowerCase();
if (key.length < 2) return; // under 2 tegn er en 400 — og den tæller
const kendt = cache.get(key);
if (kendt) return vis(kendt);
timer = setTimeout(async () => {
inflight?.abort();
inflight = new AbortController();
try {
const { results } = await gf.adresseSearch(key, 8, { signal: inflight.signal });
cache.set(key, results);
vis(results);
} catch (err) {
if ((err as Error).name !== 'AbortError') throw err;
}
}, 200);
}Et færdigt eksempel med frontend og backend-proxy står i Adressefelt i checkout.
Brug de felter, du allerede har
Mange integrationer laver kald, de ikke behøver, fordi de ikke ved, hvad der allerede står i det forrige svar:
- Hvert hit fra
/v1/adresse/searchharbfe_nummer,kommunekodeogkoordinat. Du behøver ikke et reverse-opslag for at finde ejendommen. /v1/bbr/ejendom/:bfehar kommune og region idagi, matrikelnumre ijordstykkerog et vurderingsresumé ivurdering. Se Hvad fortæller ét opslag om en ejendom?.- Enhederne i ejendomssvaret har deres adresser med etage og dør. Du behøver ikke slå hver enkelt op.
/v1/postnumregiver hele listen i ét svar uden sideinddeling.
Cache på din side
Registerdata ændrer sig langsomt sammenlignet med, hvor ofte en integration typisk spørger. Gem svarene på din side med en nøgle, der ikke ændrer sig: BFE-nummeret for ejendomme, UUID’en for adresser, CVR-nummeret for virksomheder. Hvor længe du kan genbruge et svar, afhænger af din sag — en tilbudsberegning kan leve med et svar fra i går, en sag, der skal vise registret, som det står i dag, kan ikke. Vælg levetiden ud fra det, ikke ud fra en antagelse om, hvornår registrene opdateres.
Hold nøglen på serveren
Det, der er gratis
Kodelister skal du ikke hente pr. ejendom: svaret har allerede både kode og tekst, og den fulde liste giver /v1/kodeliste/:navn uden nøgle og uden at tælle — se fx BBR-anvendelseskoder. Kommunekoder, ejerlavskoder og postnumre kan du hente som statiske filer uden nøgle: kommunekoder.csv, ejerlavskoder.csv og postnumre.csv, også som JSON. Byg din udvikling og dine tests på en gf_test_-nøgle, som aldrig faktureres.
Batch: færre forespørgsler, samme forbrug
Et batch-kald slår op til 50 ejendomme, adresser eller områder op i én forespørgsel. Det er hurtigere og giver færre round-trips og færre burst-429, men det er ikke billigere: hvert unikt id tæller ét kald. Det, batch sparer, er tid og forespørgsler — og dubletterne, som kun tælles én gang.
Hold øje med forbruget
Hvert svar har X-Quota-Remaining, så din egen overvågning kan se forbruget løbende. Med webhooks får du hændelsen usage.threshold, når månedens forbrug passerer 80 % og 100 % af kvoten. Et pludseligt hop er næsten altid en løkke eller et felt uden debounce.
Var denne side nyttig?
Ofte stillede spørgsmål
Ja. Klientfejl som 400 og 404 tæller mod kvoten. Serverfejl og timeouts lægges tilbage, og en burst-429 trækker intet.
Nej. Hvert unikt id i en batch tæller ét kald. Batch sparer forespørgsler og tid, og dubletter tælles kun én gang.
Ja, og det anbefales. Gem dem på en stabil nøgle som BFE-nummer, UUID eller CVR-nummer, og vælg levetiden ud fra hvor friske data din sag kræver.
Kodelisteopslag tæller ikke og kræver ingen nøgle. Kommunekoder, ejerlavskoder og postnumre kan hentes som statiske CSV- og JSON-filer. Testnøgler faktureres aldrig.
Først fra to tegn, og først når brugeren holder en kort pause på 150 til 250 millisekunder. Afbryd det forrige kald, når et nyt starter.
Prøv det på rigtige data
Gratis op til 5.000 kald/md · intet kreditkort · data fra Klimadatastyrelsen/Datafordeler, CC BY 4.0
Relateret