Reference¶
Denne side dokumenterer fejlhåndtering, HTTP-statuskoder og rate limiting.
HTTP-statuskoder¶
Succeskoder¶
| Kode | Betydning | Anvendelse |
|---|---|---|
200 OK |
Succesfuld læsning eller opdatering | GET, PUT |
201 Created |
Ressource oprettet | POST (oprettelse) |
204 No Content |
Handling udført, ingen body | DELETE, move, password-ændring |
Klientfejl¶
| Kode | Betydning | Typisk årsag |
|---|---|---|
400 Bad Request |
Ugyldig request | Manglende felt, forkert format, valideringsfejl |
401 Unauthorized |
Manglende eller ugyldig autentificering | Manglende token, udløbet token, forkert audience |
403 Forbidden |
Adgang nægtet | Target-ressource er uden for klientens scope |
404 Not Found |
Ressource ikke fundet | Ugyldigt ID eller slettet ressource |
409 Conflict |
Konflikt med eksisterende data | Duplikeret email, navnekonflikt |
422 Unprocessable Entity |
Semantisk fejl | Forretningsregel overtrædes |
429 Too Many Requests |
Rate limit overskredet | Se Rate limiting |
Serverfejl¶
| Kode | Betydning | Handling |
|---|---|---|
500 Internal Server Error |
Uventet serverfejl | Forsøg igen med backoff; kontakt support ved gentagne fejl |
503 Service Unavailable |
Midlertidig utilgængelig | Forsøg igen efter kort ventetid |
Fejlformat — ProblemDetails¶
Alle fejlresponser returneres som application/problem+json i henhold til RFC 9457.
Struktur¶
{
"type": "https://organisationapi.vconf-stage.dk/errors/out-of-scope",
"title": "Forbidden",
"status": 403,
"detail": "Group 'grp-xyz' is not a descendant of your root group.",
"instance": "/v1/groups/grp-xyz"
}
Felter¶
| Felt | Type | Altid til stede | Beskrivelse |
|---|---|---|---|
status |
integer | Ja | HTTP-statuskode (spejler response-header) |
title |
string | Ja | Kort, human-readable beskrivelse af fejlkategorien |
detail |
string | Ja | Specifik forklaring af hvad der gik galt |
type |
string (URI) | Nej | URI-identifikator for fejltypen |
instance |
string (URI) | Nej | URI der identificerer den specifikke request |
Eksempler¶
400 — Valideringsfejl:
{
"status": 400,
"title": "Bad Request",
"detail": "Field 'email' is required and must be a valid email address."
}
401 — Udløbet token:
{
"status": 401,
"title": "Unauthorized",
"detail": "Access token has expired. Obtain a new token from the token endpoint."
}
403 — Uden for scope:
{
"type": "https://organisationapi.vconf-stage.dk/errors/out-of-scope",
"status": 403,
"title": "Forbidden",
"detail": "Group 'grp-other-org' is not within your organisation's hierarchy."
}
404 — Ikke fundet:
409 — Duplikeret email:
{
"status": 409,
"title": "Conflict",
"detail": "A user with email 'bruger@example.dk' already exists in this organisation."
}
429 — Rate limit:
{
"status": 429,
"title": "Too Many Requests",
"detail": "Rate limit exceeded. Maximum 100 requests per minute per IP."
}
Rate limiting¶
API'et håndhæver rate limiting for at beskytte mod misbrug og sikre fair adgang.
Grænser¶
| Parameter | Værdi |
|---|---|
| Requests pr. minut pr. IP | 100 |
| Response ved overskridelse | 429 Too Many Requests |
Headers¶
Ved 429-svar inkluderes:
| Header | Beskrivelse |
|---|---|
Retry-After |
Antal sekunder før næste request tillades |
Anbefalet strategi¶
flowchart TD
A[Send request] --> B{Status 429?}
B -->|Nej| C[Behandl response]
B -->|Ja| D[Læs Retry-After header]
D --> E[Vent angivet tid]
E --> A
Best practice
- Implementér exponential backoff ved gentagne 429-svar
- Cache tokens og undgå unødige token-requests
- Brug paginering med fornuftig
limit-værdi (50–100) for at minimere antal requests - Batch logisk sammenhørende operationer i tid, fremfor at sende burst-requests
Token-levetid og refresh¶
| Parameter | Typisk værdi |
|---|---|
| Token-levetid | 300 sekunder (5 minutter) |
| Refresh-strategi | Hent nyt token før udløb (fx 30 sek. margin) |
Ingen refresh tokens
Client Credentials flow udsteder ikke refresh tokens. Hent et helt nyt access token når det aktuelle udløber.
Content-type og encoding¶
| Aspekt | Værdi |
|---|---|
| Request body format | application/json; charset=utf-8 |
| Response body format | application/json (success) / application/problem+json (fejl) |
| Encoding | UTF-8 |