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.

4 min Niveau: Begynder ✓ Kode testet

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.dk og www.firma.dk. Se Browsernøgler og tilladte domæner.
  • Serverkode sender nøglen i headeren X-Api-Key, ikke som api_key i 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'et 429 quota_exceeded resten 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: 429 på minutgrænsen, 503, 502, 504 og netværksfejl, med backoff og Retry-After. Aldrig 401, 403, 400 eller quota_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

Data

Overvågning

  • Du logger X-RateLimit-Remaining og får en advarsel ved 80 procent af månedskvoten. På Hobby advarer du også, når X-Quota-Grace: true dukker 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 sende X-Api-Key, så brug api_key og en domænelåst browsernøgle, eller skift til fetch.

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:

Python#preflight
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)

Prøv det med en gratis nøgle

2 000 kald/måned på gratisplanen. Intet kreditkort.

Opret konto →