N5TG beskriver at $ref og $id kan brukes til å legge til eller oppdatere relasjoner mellom entiteter i arkivet. Jeg har aldri klart å forstå hvordan dette skulle fungere. For flytting er det spesifisert hvordan PATCH med oppdaterte verdier for aktuelle relasjonsnøkler kan brukes, og disse har jeg både sikret at er implementert i Nikita og sjekket at fungerer som de skal. Jeg tror mekanismen som brukes for flytting med fordel også kan brukes til andre relasjonsoppdateringer.
Jeg foreslår derfor at alle oppdateringer av relasjoner mellom entiteter, det være seg foreldre/barn-relasjonen som oppdateres med flytting, forrige-/neste-relasjoner, kryssreferanser, sekunderklassifikasjon, avskrivinger og ligende oppdateres med bruk av relasjonsnøkler i _links.
Det betyr at i stedet for følgende hentet fra N5TG, som skal opprette en ny referanse mellom registrering og dokumentbeskrivelse:
POST https://n5.example.com/api/arkivstruktur/registrering/cf8e1d0d-e94d-4d07-b5e...
(og her forstår jeg ikke om en av dem eller begge disse entitetene er forventet å eksistere i forkant av nykoblingen)
Med PATCH derimot oppretter en ny kobling fra en aktuell dokumentbeskrivelse og til en eksisterende registrering ala dette:
PATCH https://n5.example.com/api/arkivstruktur/dokumentbeskrivelse/1fa94a89-3550-4...
{ "_links": { "https://rel.arkivverket.no/noark5/v5/api/arkivstruktur/registrering/": { "href": "https://n5.example.com/api/arkivstruktur/registrering/cf8e1d0d-e94d-4d07-b5e..." } } }
En kan tilsvarende bruke PUT hvis hele entitetsdatasettet repeteres og ny _links legges til, men som nevnt tidligere foreslår jeg å droppe PUT fullstendig for å gjøre API-et mindre tvetydlig.
Jeg har fått laget et par endringsforslag som implementerer denne tilnærmingen i <URL: https://gitlab.com/OsloMet-ABI/nikita-noark5-core/-/merge_requests/605 > og <URL: https://gitlab.com/OsloMet-ABI/nikita-noark5-core/-/merge_requests/615 > for henholdvis forrige-/nestearkivdel og kryssreferanser, og holder på å oppdatere møteendringen til å bruke samme notasjon for forrige og neste moetemappe og -registrering.
Jeg foreslår at vi går for denne tilnærmingen i Nikita og foreslår at N5TG endres tilsvarende.
Da blir det en uniform mekanisme for å både vise frem og endre relasjoner mellom entiteter (_links), der en ser fra resultatet en får fra GET hvordan en må bruke PATCH for å endre en relasjon. Og mekanismen er den sammen uansett om relasjonen eksisterer fra før eller ikke.
Hva tror dere?