Go-live-tjekliste for din adresseintegration
Gå nøgler, grænser, fejlhåndtering, caching, data og overvågning igennem, før din integration med Danadresse går i produktion.
Det meste, der går galt i produktion, er ikke selve kaldene, men det omkring dem: en testnøgle, der kom med i produktion, en nøgle, der ligger i en offentlig side uden domænelås, eller et adressefelt, der bliver tomt, når en grænse rammes.
Listen her samler de punkter, der er værd at tjekke, før du går live. Hvert punkt linker til en guide med detaljerne.
Nøgler
- Brug en live-nøgle. Testnøgler (
dawa_test_…) tælles pr. IP-adresse på gratisplanens niveau, og de kan ikke kalde/api/v1/enrich/…. Se Testnøgler og sandbox. - Én nøgle pr. miljø og tjeneste. Så kan du rotere eller tilbagekalde én uden at ramme de andre, og du kan se i dashboardet, hvilken der bliver brugt.
- Nøglen ligger i et secret-lager, ikke i koden og ikke i Git. Se Rotér API-nøgler.
- Nøgler i websider er låst til dine domæner under Tilladte domæner. Husk både
firma.dkogwww.firma.dk. Se Browsernøgler og tilladte domæner. - Serverkode sender nøglen i headeren
X-Api-Key, ikke somapi_keyi URL'en.
Grænser
- Du kender dit forventede forbrug pr. måned og pr. minut og har valgt en plan, der passer. Se planerne på forsiden.
- På Hobby er kvoten et loft. Efter 2 000 kald får du svar fra en buffer op til 2 400 kald (headeren
X-Quota-Grace: true). Derefter svarer API'et429 quota_exceededresten af måneden. - På en betalt plan har du valgt et budgetloft, hvis merforbruget ikke må løbe frit. Det sættes under Betaling. Uden loft bliver kald ud over kvoten afregnet som merforbrug.
- Batchjob holder tempoet under grænsen pr. minut (360 på Hobby, 1 700 på Basis, 7 000 på Pro). Se Overvåg forbruget.
- Hele datasættet hentes med replikering, ikke med tusindvis af enkeltkald. Se Første udtræk.
Fejlhåndtering
- Alle kald har en timeout, fx 10 sekunder.
- Du prøver kun det igen, der kan lykkes:
429på minutgrænsen,503,502,504og netværksfejl, med backoff ogRetry-After. Aldrig401,403,400ellerquota_exceeded. Se Retries og backoff. - Du forgrener på
code, ikke på fejlteksten. Se Fejlformatet. - Brugeren kan komme videre, hvis API'et ikke svarer. Et adressefelt i en checkout skal kunne udfyldes i hånden, og ordren skal kunne gennemføres.
Ydelse
- Autocomplete har debounce på 150 til 250 ms og afbryder forældede kald. Se Hjemmebygget DAWA-autocomplete.
- Opslag, der ikke ændrer sig, bliver cachet, fx postnumre og kommuner. Fejlsvar caches aldrig. Se Caching af adresseopslag.
- Listekald er pagineret med
sideogper_side. Se Paginering.
Data
- Du gemmer adressens id, ikke kun teksten. Se Gem adresse-id'et.
- Du har en plan for adresser, der bliver nedlagt. Se status, darstatus og nedlagte adresser.
- Kildeangivelsen står på dine sider: "Indeholder data fra Klimadatastyrelsen (CC BY 4.0)". Se Datalicens, kildeangivelse og persondata.
- Kun adressen sendes til API'et, aldrig navne, e-mails eller telefonnumre.
Overvågning
- Du logger
X-RateLimit-Remainingog får en advarsel ved 80 procent af månedskvoten. På Hobby advarer du også, nårX-Quota-Grace: truedukker op: så er kvoten brugt, og bufferen er i gang. - Du reagerer på
X-Danadresse-Key-Status. Er den sat, er nøglen markeret som mulig lækket. - Du ved, hvor driftsstatus står: status-siden. Ændringer i API'et står i changeloggen. Spørgsmål og fejl sender du via support.
Migreret fra DAWA?
- Ingen DAWA-adresser er tilbage i koden eller konfigurationen, og CI fejler, hvis de kommer igen. Se Find DAWA-kald med migrate-cli.
- Du har tjekket listen over kendte forskelle mod de endpoints og felter, du bruger. Se Skift fra DAWA.
- JSONP har nøglen i URL'en, hvis din frontend bruger
callback. Et<script>-tag kan ikke sendeX-Api-Key, så brugapi_keyog en domænelåst browsernøgle, eller skift tilfetch.
Kør et sidste tjek
Scriptet kører med den nøgle, du vil gå live med. Det advarer, hvis det er en testnøgle, laver ét kald og viser, hvor meget plads der er:
import os import requests noegle = os.environ["DANADRESSE_API_KEY"] if noegle.startswith("dawa_test_"): print("ADVARSEL: det er en testnøgle. Brug en live-nøgle i produktion.") r = requests.get( "https://api.danadresse.dk/autocomplete", params={"q": "Rådhuspladsen 1", "per_side": 1}, headers={"X-Api-Key": noegle}, timeout=10, ) print(f"autocomplete: {r.status_code}") print("månedskvote:", r.headers.get("X-RateLimit-Limit"), "- tilbage:", r.headers.get("X-RateLimit-Remaining")) print("pr. minut: ", r.headers.get("X-RateLimit-Minute-Limit")) status = r.headers.get("X-Danadresse-Key-Status") if status: print(f"ADVARSEL: nøglen er markeret som {status}") if r.status_code != 200: print(r.text) raise SystemExit(1)
Når alt er grønt, så kør røgtesten fra Skift fra DAWA med de endpoints, din kode bruger.
Relaterede guides
Markdown-kilde Fejl i guiden? Skriv til os API-reference (Swagger)