Spring videre til hovedindholdet

11.20 TimeView API - Idempotency key beskrivelse

Hvorfor skal der bruges idempotency key til TimeView API’et?

Opdateret over en uge siden

VIGTIGT! Idempotency keys er obligatoriske på POST og PATCH operationer efter 30. september 2025.

En idempotency key er afgørende for API-brugere ved brug af POST og PATCH, fordi den sikrer stabilitet og forhindrer uønskede fejl i systemet. Når en API-anmodning medfører ændringer, er det muligt, at anmodningen bliver sendt mere end én gang (fx pga. netværksfejl eller tidsoverskridelser). Uden en idempotency key kan dette føre til dublerede handlinger, som f.eks. duplikerede oprettelser, eller utilsigtede opdateringer.

Her er nogle af hovedfordelene:

  • **Datakonsistens:** Ved at bruge en unik idempotency key kan API'en genkende og ignorere gentagne anmodninger, hvilket forhindrer uønskede ændringer i databasens tilstand.

  • **Fejlhåndtering:** Hvis en POST eller PATCH-anmodning mislykkes eller hænger, kan klienten sende samme anmodning igen med den oprindelige idempotency key og være sikker på, at der ikke opstår uønskede effekter.

  • **Sporbarhed:** Idempotency keys gør det nemmere for udviklere at spore unikke API-anmodninger og logge gentagelser effektivt.

Ved POST og PATCH operationer mod TimeView API’et skal der derfor medsendes idempotency key.

Idempotency keyen skal være unik for hver operation der foretages mod API’et.

Dvs. at ved f.eks. oprettelse af kunde, skal der inkluderes en unik idempotency key. Det er vigtigt, at denne key ikke skiftes hvis kaldet til API’et fejler pga. f.eks. netværksproblemer. Keyen må altså ikke skifte ved retry.

Der er ingen krav til idempotency keyens format. Den kan være en vilkårlig string.

Idempotency keyen skal sættes som header med headernavn “idempotency-key”


Eksempel: Post af ny tidsregistrering

Content-Type: application/json
Idempotency-Key: [YOUR_UNIQUE_IDEMPOTENCY_KEY]

{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"userId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"startDateTime": "2025-04-28T05:49:32.839Z",
"endDateTime": "2025-04-28T05:49:32.839Z",
"durationInHours": 0,
"taskId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"comment": "string",
"isInvoiceable": true,
"transport": 0,
"workTypeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"transportWorkTypeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"transportPurpose": "string",
"transportRoute": "string",
"transportLicensePlate": "string",
"transportIsCompanyCar": true,
"invoiceRateNumber": 0,
"invoiceExpence": 0,
"invoiceExpenceText": "string",
"invoiceExpenceWorkTypeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"invoiceExpenceIncludesVat": true,
"externalId": "string",
"externalTag": "string",
"transportQueryAndResult": "string"
}


Læs om vores API, hvordan du kan integrere og beskrivelse af endpoints i artiklen 11.13 TimeView API

Har du spørgsmål til ovenstående kontakt da venligst vores support på

Besvarede dette dit spørgsmål?