Tre veje ind
Hvilket API du arbejder med, afhænger af hvilken ende du bygger. Specifikationen er den samme hos alle bibliotekssystemer der implementerer den.
Provider API · Vendor API
Du bygger en tjeneste
En app, en hjemmeside, selvbetjening, en infoskærm eller et medarbejderværktøj. Du kalder Provider API'et og implementerer Vendor API'et, hvis tjenesten bruger SSO eller hændelser.
Følg de fire trinProvider API
Du leverer systemet
Bibliotekssystemet implementerer Provider API'et: operationerne, token-endpointet og måden kaldere kendes fra hinanden på.
Implementér API'etSearch API · Content API
Du leverer data
Søgning eller arrangementer. Search API og Content API er udsnit af Provider API'ets operationer, hver med sin egen specifikation. Spec'en nævner selv at fx søgningen kan overlades til en tredjepart.
Se de fire API'er
Første kald i fire trin
Trinene gælder Provider API'et i den version der er i produktion. Detaljerne til hvert trin står i afsnittene nedenfor.
Få adgang
Base-URL'en og dine client credentials kommer fra provideren — leverandøren af bibliotekssystemet, som implementerer token-endpointet. Spec'en har ingen fælles base-URL.
Tjek versionen
Kaldet kræver ingen token og svarer med den version provideren anbefaler — et første tjek af forbindelsen, før du autentificerer.
Hent en token
Send dine client credentials, og få en
Bearer-token tilbage. Den skal med iAuthorization-headeren på kaldene derefter.Lav det første kald
Konfigurationen fortæller hvad bibliotekssystemet har slået til — fx udlån, aflevering og hvilke identitetsudbydere der kan bruges. Før udlån og aflevering kræver spec'en at tjenesten finder dem slået til her.
Ved du ikke hvilke kald din tjeneste skal bruge? Funktionerne tager udgangspunkt i det du vil bygge og viser kaldene bag hver funktion. Spec'en siger selv at den stadig er under arbejde, og at felter og struktur kan ændre sig — alle versioner står med deres OpenAPI-fil på API-oversigten, og changeloggen siger hvad der ændrede sig i hver.
Base-URL
Spec’en har ingen servers-blok. Base-URL’en er providerens, ikke PLAS’, og den aftales med provideren. Alle stier i referencen — /, /, / — er relative til den.
Spec’en beskriver to måder en provider kan kende sine kaldere på: en base-URL pr. bibliotek og credentials pr. leverandør, så samme tjeneste kalder forskellige adresser hos forskellige biblioteker, eller én base-URL for alle, hvor credentials afgør både bibliotek og leverandør. Regn derfor ikke med at base-URL’en er den samme fra bibliotek til bibliotek, selv hos samme provider.
Autentificering
Provider API’et bruger OAuth 2.0 med client credentials. Ét kald giver en token, og tokenen sendes med på kaldene derefter.
Hent en token. Send et POST til / med Content-Type: application/x-www-form-urlencoded og tre felter: client_, client_ og grant_ med værdien client_. Kaldet kræver ikke selv en token.
POST /authentication/oauth2/token
Content-Type: application/x-www-form-urlencoded
client_id=<client_id>&client_secret=<client_secret>&grant_type=client_credentials
Svaret er JSON med tre felter — alle påkrævede:
access_— selve tokenen. Spec’en anbefaler provideren at udstede en JWT, så den kan bruges hvis en del af API’et (fx søgningen) overlades til en tredjepart.token token_— altidtype Bearer.expires_— tokenens levetid i sekunder.in
Brug tokenen. Sæt den i Authorization-headeren: Authorization: Bearer <access_token>. Kun tre operationer klarer sig uden: Get, Authenticate og Revoke.
Når den udløber. HTTP 401 betyder at tokenen mangler, er ugyldig eller er udløbet. En token du ikke længere skal bruge, trækkes tilbage med Revoke
Fælles regler for alle kald
Reglerne står én gang i spec’en. Den delte kontrakt — parametre og fejlsvar som næsten alle operationer deler — står på versionsoversigten.
version(query, valgfri, på næsten alle operationer) — den API-version klienten forventer. Understøtter provideren den ikke, svarer den med fejlkode600.ui_(query, valgfri, på de operationer der angiver den) — det sprog provideren returnerer tekster i. Koderne følger MARC-language sproglisten .- URL- og query-parametre forventes URL-encodede. Et id med komma i en kommasepareret liste encodes derfor til
%2, mens kommaet mellem id’erne står som det er.C - Datoer og tidspunkter følger RFC 3339. Et tidspunkt skrives som
date-med storttime Tog eksplicit tidszone — spec’en antager ingen. En ren dato skrivesYYYY-.MM- DD - Svar bør ikke indeholde HTML, medmindre operationen udtrykkeligt siger det.
- Svar der er et map over de id’er du sendte, indeholder kun dem provideren kender. Ukendte id’er udelades; er alle ukendte, er svaret et tomt map.
Fejl
Et fejlsvar (HTTP 400) er et objekt med listen errors (Errors); hvert element har code og info (Error), og det første er det mest relevante. Koden er et tal, og den fulde liste står i skemaet Error
500— systemfejl hos provideren.600— den version du bad om, understøttes ikke.10001— operationen er slået fra hos denne provider.
Resten er domænespecifikke — fx 100023 for et ukendt patron og 102001 for et ukendt lån — og står alle i Error; flere operationer beskriver dem de kan give.
HTTP-koderne 400, 401, 404 og 429 er delte svar og beskrives på versionsoversigten. 401 findes i to udgaver: en token der mangler, er ugyldig eller udløbet, og et mislykket klient-login på Authenticate. Et forkert låner-login har sin egen fejlkode, 100001. 429 betyder at provideren begrænser antallet af kald — den er erklæret på Checkin, Checkout og Change; svaret bør angive i Retry- hvor mange sekunder der skal gå, og låneren skal se »prøv igen senere«, ikke en fejl i det de har sendt.
Når bibliotekssystemet kalder tjenesten
Trafikken går også den anden vej. Det sker gennem Vendor API'et, og den del implementerer tjenesten selv.
SSO-login
Låneren logger ind hos en identitetsudbyder, og bibliotekssystemet sender lånerens browser tilbage til tjenestens callback med
codeogstate— ellererror, hvis det ikke lykkedes. Tjenesten afslutter login medcodeog sincode_(PKCE). Registrering lander på samme callback; sletning har sit eget.verifier - GET
/patron/authentication/identity-providerThis will fetch a SSO URL used for patron login, matching the chosen identity provider. - GET
/callbacks/patronDin tjeneste Callback endpoint for Patron SSO login and registration. - POST
/patron/authentication/identity-providerAuthenticate patron by code and code verifier from SSO login.
- GET
Hændelser
Tjenesten registrerer en adresse og en hemmelighed, og bibliotekssystemet sender hændelser dertil — fx en reservation der er klar, et lån der snart skal afleveres, eller et samtykke der er ændret. Hvad der sendes, afhænger bl.a. af lånerens notifikationsindstillinger.
Implementerer du Provider API'et
Så er du provideren. Ud over operationerne beskriver spec'en fem ting du skal tage stilling til — de to sidste er anbefalinger fra dens sikkerhedsafsnit.
Token-endpointet er dit
Spec'en siger at du bør implementere
POST /authentication/oauth2/tokenog udstede tokens mod client credentials. Spec'en anbefaler en JWT, fordi den kan bruges hvis en del af API'et — fx søgningen — overlades til en tredjepart.Du afgør hvordan kaldere kendes
Spec'en nævner to måder: en base-URL pr. bibliotek og credentials pr. leverandør, eller én base-URL hvor credentials afgør begge dele.
Funktioner kan slås til og fra
Getfortæller tjenesten hvad der er slået til; før udlån og aflevering skal tjenesten tjekke den. FejlkodeConfiguration 10001betyder at en operation er slået fra.Et UUID som patronId
Spec'en anbefaler stærkt et UUID — og, bruger systemet heltal som låner-id, at lægge et UUID ved siden af og kun bruge det i PLAS.
Begræns loginforsøg
Rate limiting pr. låner-identifikator på
POST /patron/authenticationogPOST /patron/authentication/no-password, og pr. låner når credentials nulstilles eller ændres. Ved ændring af credentials bør grænsen svare med429.