Gå til hovedinnhold

Fra FSWS-Studrapp til FS GraphQL API

FSWS-Studrapp er under utfasing, og deler av tjenesten er nå erstattet av FS GraphQL API. Studrapp-tjenesten består av endepunkter som er laget til litt forskjellige formål:

  • Studentdata og grunnlagsdata om undervisning og vurdering
  • Rapportering av godkjent utenlandsopphold til Lånekassen
  • Synkronisering av data mellom FS og timeplanleggingssystemet TP

Studentdata og grunnlagsdata om undervisning og vurdering

Disse endepunktene henter data for en bestemt student og/eller en bestemt termin. Det er som regel mulig å konstruere en GraphQL-spørring som gir omtrent samme data, selv om datatastrukturen kan være litt forskjellig. Under gir vi eksempler for hvert enkelt endepunkt. GraphQL gir imidlertid stor fleksibilitet når det gjelder hvordan du henter dataene. Vi anbefaler at du bruker tid på å sette sammen en spørring som passer ditt behov.

Merk: FS GraphQL API bruker base64-enkodede sammensatte nøkler som IDer. Eksemplene nedenfor viser hvordan du henter disse IDene via oppslag.

For eksempel, for å hente student-ID basert på Feide-brukernavn:

query HentStudentId {
studenterGittFeideBrukere(
eierOrganisasjonskode: "1234"
feideBrukere: ["yngve@spusers.feide.no"]
) {
id
}
}

Eksempel på svar:

{
"data": {
"studenterGittFeideBrukere": [
{
"id": "OTk6MTIzNCw5MDA"
}
]
}
}

Hent data for en student

Dette endepunktet henter grunnleggende informasjon om en student identifisert med brukernavn, inkludert personalia, studieprogram, semesterregistreringer, fakturaer og vurderingsmeldinger. For å hente samme data via FS GraphQL API kan du bruke spørringen studenterGittFeideBrukere. Du kan legge til eller fjerne nøstede felt etter behov.

query HentStudentdata {
studenterGittFeideBrukere(
eierOrganisasjonskode: "1234"
feideBrukere: ["18628790120@spusers.feide.no"]
) {
studentnummer
personProfil {
navn {
fornavn
etternavn
}
institusjonsEpost
privatEpost
mobilTelefon {
landnummer
nummer
}
fodselsnummer
fodselsdato
postadresse {
gate
postnummerOgSted
}
}
programStudieretter {
nodes {
studieprogram {
kode
}
studentstatus {
kode
}
}
}
semesterregistreringer(
filter: {erSemesterregistrert: true}
) {
nodes {
termin {
betegnelse {
kode
}
arstall
}
erSemesterregistrert
harBetaltSemesteravgiftV2
}
}
fakturaerForInnevarendeTermin {
termin {
betegnelse {
kode
}
arstall
}
betal
}
vurderingsmeldinger {
vurderingsenhet {
emne {
kode
}
vurderingsperiode {
gjelderTermin {
betegnelse {
kode
}
arstall
}
}
}
}
}
}

Eksempel på svar:

{
"data": {
"studenterGittFeideBrukere": [
{
"studentnummer": "070056",
"personProfil": {
"navn": {
"fornavn": "Anders",
"etternavn": "Adelsen"
},
"institusjonsEpost": null,
"privatEpost": null,
"mobilTelefon": {
"landnummer": "+46",
"nummer": "703796001"
},
"fodselsnummer": "18628790120",
"fodselsdato": "1987-12-18",
"postadresse": {
"gate": "Forskningsveien 3 B",
"postnummerOgSted": "0260 OSLO"
}
},
"programStudieretter": {
"nodes": [
{
"studieprogram": {
"kode": "AMH-MUS1"
},
"studentstatus": {
"kode": "AKTIV"
}
},
{
"studieprogram": {
"kode": "BA-SVF"
},
"studentstatus": {
"kode": "SLUTTET"
}
}
]
},
"semesterregistreringer": {
"nodes": [
{
"termin": {
"betegnelse": {
"kode": "VÅR"
},
"arstall": 2018
},
"erSemesterregistrert": true,
"harBetaltSemesteravgiftV2": true
},
{
"termin": {
"betegnelse": {
"kode": "VÅR"
},
"arstall": 2019
},
"erSemesterregistrert": true,
"harBetaltSemesteravgiftV2": true
},
{
"termin": {
"betegnelse": {
"kode": "VÅR"
},
"arstall": 2020
},
"erSemesterregistrert": true,
"harBetaltSemesteravgiftV2": false
}
]
},
"fakturaerForInnevarendeTermin": [
{
"termin": {
"betegnelse": {
"kode": "HØST"
},
"arstall": 2025
},
"betalt": true
},
{
"termin": {
"betegnelse": {
"kode": "HØST"
},
"arstall": 2025
},
"betalt": false
}
],
"vurderingsmeldinger": [
{
"vurderingsenhet": {
"emne": {
"kode": "AMH-EXFAC"
},
"vurderingsperiode": {
"gjelderTermin": {
"betegnelse": {
"kode": "HØST"
},
"arstall": 2019
}
}
}
},
{
"vurderingsenhet": {
"emne": {
"kode": "AMH-EXFAC"
},
"vurderingsperiode": {
"gjelderTermin": {
"betegnelse": {
"kode": "VÅR"
},
"arstall": 2020
}
}
}
},
{
"vurderingsenhet": {
"emne": {
"kode": "AMH-MUS1006"
},
"vurderingsperiode": {
"gjelderTermin": {
"betegnelse": {
"kode": "VÅR"
},
"arstall": 2023
}
}
}
}
]
}
]
}
}

Hent aktive emner

Dette endepunktet henter emner som har undervisning i en gitt termin. For å hente samme data via FS GraphQL API kan du bruke spørringen undervisningsterminerForEmner filtrert på termin. Du må først hente termin-ID via terminerGittTerminkoder.

Steg 1: Hent termin-ID

query HentTerminId {
terminerGittTerminkoder(
eierOrganisasjonskode: "1234"
terminkoder: [{
arstall: 2023
terminkode: "HØST"
}]
) {
id
}
}

Eksempel på svar:

{
"data": {
"terminerGittTerminkoder": [
{
"id": "MTE2OjEyMzQsMjAyMyxIw5hTVA"
}
]
}
}

Steg 2: Hent undervisningsterminer for emner i terminen

query HentAktiveEmner {
undervisningsterminerForEmner(
filter: {
eierOrganisasjonskode: "1234"
gjelderForTerminer: ["MTE2OjEyMzQsMjAxNSxIw5hTVA"]
}
first: 5
) {
nodes {
terminnummer
emne {
kode
versjonskode
navnAlleSprak {
nb
}
studieansvarligOrganisasjonsenhet {
navnAlleSprak {
nb
}
}
}
}
}
}

Eksempel på svar:

{
"data": {
"undervisningsterminerForEmner": {
"nodes": [
{
"terminnummer": 1,
"emne": {
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "Norges idrettshøgskole"
}
}
}
},
{
"terminnummer": 2,
"emne": {
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "Norges idrettshøgskole"
}
}
}
},
{
"terminnummer": 1,
"emne": {
"kode": "1BA-113",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Treningslære"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "Norges idrettshøgskole"
}
}
}
},
{
"terminnummer": 1,
"emne": {
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "Norges idrettshøgskole"
}
}
}
},
{
"terminnummer": 1,
"emne": {
"kode": "1BA-135",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Ballspill"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "Norges idrettshøgskole"
}
}
}
}
]
}
}
}

Hent emner med eksamen

Dette endepunktet henter emner som har vurderingsenheter (eksamener eller andre vurderinger) i en gitt termin. For å hente samme data via FS GraphQL API kan du bruke spørringen vurderingsenheter filtrert på termin. Du må først hente termin-ID via terminerGittTerminkoder (se "Hent aktive emner" over for eksempel).

Hent vurderingsenheter for terminen

query HentEmnerMedEksamen {
vurderingsenheter(
filter: {
eierOrganisasjonskode: "1234"
terminer: ["MTE2OjEyMzQsMjAyNCxWw4VS"]
}
) {
nodes {
emne {
kode
versjonskode
navnAlleSprak {
nb
}
studieansvarligOrganisasjonsenhet {
navnAlleSprak {
nb
}
}
}
}
}
}

Eksempel på svar:

{
"data": {
"vurderingsenheter": {
"nodes": [
{
"emne": {
"kode": "SEAN1",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Sean1"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "Det matematisk-naturvitenskapelige fakultet, UiO"
}
}
}
},
{
"emne": {
"kode": "SEAN2",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Sean2"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "Det matematisk-naturvitenskapelige fakultet, UiO"
}
}
}
},
{
"emne": {
"kode": "SEAN2",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Sean2"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "Det matematisk-naturvitenskapelige fakultet, UiO"
}
}
}
},
{
"emne": {
"kode": "VK9C",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Vk9c"
},
"studieansvarligOrganisasjonsenhet": {
"navnAlleSprak": {
"nb": "FS9"
}
}
}
}
]
}
}
}

Du kan også filtrere på andre kriterier ved å bruke emner, vurderingsoppbygningsdeler, vurderingsperioder eller reelleVurderingsperioder i filteret.

Hent eksamener for en student

Eksempel kommer

Hent studenter med endringer siden angitt tid

I REST-APIet returnerte dette endepunktet brukernavn for studenter med endringer siden et angitt tidspunkt. I GraphQL-APIet brukes studenthendelser for å hente hendelser relatert til studenter. Tidsfiltrering er ikke tilgjengelig, men du kan være mer spesifikk på hvilke typer hendelser du er interessert i ved å filtrere på eierOrganisasjonskode, hendelsestype og studieniva.

For å følge med på nye hendelser anbefales det å bruke paginering med edges og cursor, og lagre endCursor-verdien for å hente nye hendelser siden sist. Les mer om hendelser og paginering i dokumentasjonen for hendelser.

query HentStudentHendelser {
studenthendelser(
filter: {
eierOrganisasjonskode: "1234"
hendelsestype: [
SEMESTERREGISTRERING_STATUS_BET_OK
STUDENTKORT_UTGATT
ENDRET_NAVN
]
}
) {
pageInfo {
hasNextPage
endCursor
}
edges {
cursor
node {
hendelsestype
student {
personProfil {
feideBruker
}
}
}
}
}
}

Merk: Det finnes mange andre hendelsestyper tilgjengelig. Du kan filtrere på så mange hendelsestyper du er interessert i.

Eksempel på svar:

{
"data": {
"studenthendelser": {
"pageInfo": {
"hasNextPage": false,
"endCursor": "WzEyMzQsMTEyXQ"
},
"edges": [
{
"cursor": "WzEyMzQsMTNd",
"node": {
"hendelsestype": "SEMESTERREGISTRERING_STATUS_BET_OK",
"student": {
"personProfil": {
"feideBruker": "30567990024@spusers.feide.no"
}
}
}
},
{
"cursor": "WzEyMzQsMjFd",
"node": {
"hendelsestype": "SEMESTERREGISTRERING_STATUS_BET_OK",
"student": {
"personProfil": {
"feideBruker": "30567990024@spusers.feide.no"
}
}
}
},
{
"cursor": "WzEyMzQsNDFd",
"node": {
"hendelsestype": "SEMESTERREGISTRERING_STATUS_BET_OK",
"student": {
"personProfil": {
"feideBruker": "30567990024@spusers.feide.no"
}
}
}
},
{
"cursor": "WzEyMzQsMTExXQ",
"node": {
"hendelsestype": "SEMESTERREGISTRERING_STATUS_BET_OK",
"student": {
"personProfil": {
"feideBruker": "14578990047@spusers.feide.no"
}
}
}
},
{
"cursor": "WzEyMzQsMTEyXQ",
"node": {
"hendelsestype": "SEMESTERREGISTRERING_STATUS_BET_OK",
"student": {
"personProfil": {
"feideBruker": "04577690095@spusers.feide.no"
}
}
}
}
]
}
}
}

Hent studieprogram

Dette endepunktet henter aktive studieretter for en gitt student idetifisert med brukernavn. For å hente samme data via FS GraphQL API kan du bruke spørringen studenterGittFeideBrukere. Du kan hente studentens aktive studieretter via feltet programStudieretter. Eksempel:

query HentStudieprogram {
studenterGittFeideBrukere(
eierOrganisasjonskode: "1234"
feideBrukere: ["yngve@spusers.feide.no"]
) {
programStudieretter {
edges {
node {
studieprogram {
kode
}
}
}
}
}
}

Eksempel på svar:

{
"data": {
"studenterGittFeideBrukere": [
{
"programStudieretter": {
"edges": [
{
"node": {
"studieprogram": {
"kode": "MEDISIN"
}
}
}
]
}
}
]
}
}

Hent undervisning for en student

Dette endepunktet henter undervisningsaktiviteter for en student basert på år og termin. For å hente samme data via FS GraphQL API trenger du student-ID og termin-ID (se "Hent data for en student" og "Hent aktive emner" for hvordan du henter disse).

Du kan deretter hente studentens emnestudieretter med undervisningsaktiviteter som nøstet data:

query HentUndervisningForStudent {
emneStudieretter(
filter: {
eierOrganisasjonskode: "1234"
studenter: ["OTk6MTIzNCwyMzY0MQ"]
terminer: ["MTE2OjEyMzQsMjAyMyxIw5hTVA"]
}
) {
nodes {
emne {
kode
versjonskode
}
terminnummer
fellesundervisning {
nodes {
kode
undervisningsform {
kode
}
}
}
undervisningspartiPlasseringer {
undervisningsaktivitet {
kode
undervisningsform {
kode
}
partinummer
}
}
}
}
}

Eksempel på svar:

{
"data": {
"emneStudieretter": {
"nodes": [
{
"emne": {
"kode": "PRA1001",
"versjonskode": "1"
},
"terminnummer": 1,
"fellesundervisning": {
"nodes": [
{
"kode": "1",
"undervisningsform": {
"kode": "FOR"
}
}
]
},
"undervisningspartiPlasseringer": [
{
"undervisningsaktivitet": {
"kode": "0-P-5",
"undervisningsform": {
"kode": "ALP-PRAKS"
},
"partinummer": "5"
}
}
]
},
{
"emne": {
"kode": "HEIS100",
"versjonskode": "1"
},
"terminnummer": 1,
"fellesundervisning": {
"nodes": [
{
"kode": "4",
"undervisningsform": {
"kode": "FOR"
}
},
{
"kode": "5",
"undervisningsform": {
"kode": "FOR"
}
}
]
},
"undervisningspartiPlasseringer": [
{
"undervisningsaktivitet": {
"kode": "1-1",
"undervisningsform": {
"kode": "LAB"
},
"partinummer": "1"
}
}
]
}
]
}
}
}

Feltet fellesundervisning returnerer undervisningsaktiviteter som er felles for alle studenter (tilsvarer "fellesundervisning" i det gamle APIet). Feltet undervisningspartiPlasseringer returnerer aktiviteter der studenten er plassert i et parti (tilsvarer "partiundervisning" i det gamle APIet).

Hent undervisningsaktiviteter for et emne

Dette endepunktet henter undervisningsaktiviteter for et gitt emne i et gitt semester. For å hente samme data via FS GraphQL API kan du bruke spørringen undervisningsaktiviteter filtrert på emne og termin. Du må først hente emne-ID og termin-ID (se "Hent aktive emner" for hvordan du henter termin-ID).

Steg 1: Hent emne-ID

query HentEmneId {
emnerGittEmnekoder(
eierInstitusjonsnummer: "1234"
emnekoder: {
emnekode: "ECON1230"
versjonskode: "1"
}
) {
id
}
}

Eksempel på svar:

{
"data": {
"emnerGittEmnekoder": [
{
"id": "MjA6MTIzNCwxODUsRUNPTjEyMzAsMQ"
}
]
}
}

Steg 2: Hent undervisningsaktiviteter

query HentUndervisningsaktiviteter {
undervisningsaktiviteter(
filter: {
eierOrganisasjonskode: "1234"
emner: ["MjA6MTIzNCwxODUsRUNPTjEyMzAsMQ"]
terminer: ["MTE2OjEyMzQsMjAwNCxIw5hTVA"]
}
first: 5
) {
nodes {
id
kode
navnAlleSprak {
nb
}
timerPerUke
timeplan {
nodes {
ukedag {
ukedagnummer
}
bygning {
kode
}
rom {
kode
kapasitet {
undervisning
eksamen
}
}
klokkeslett {
fra
til
}
undervisningsuker {
ukenummer
harUndervisning
arstall
}
}
}
}
}
}

Eksempel på svar:

{
"data": {
"undervisningsaktiviteter": {
"nodes": [
{
"id": "MTIwOjEyMzQsMTg1LEVDT04xMjMwLDEsMjAwNCxIw5hTVCwxLDA",
"kode": "0",
"navnAlleSprak": {
"nb": "Undervisning"
},
"timerPerUke": null,
"timeplan": {
"nodes": [
{
"ukedag": null,
"bygning": null,
"rom": null,
"klokkeslett": null,
"undervisningsuker": []
},
{
"ukedag": null,
"bygning": null,
"rom": null,
"klokkeslett": null,
"undervisningsuker": []
}
]
}
},
{
"id": "MTIwOjEyMzQsMTg1LEVDT04xMjMwLDEsMjAwNCxIw5hTVCwxLDE",
"kode": "1",
"navnAlleSprak": {
"nb": "Forelesninger"
},
"timerPerUke": null,
"timeplan": {
"nodes": []
}
},
{
"id": "MTIwOjEyMzQsMTg1LEVDT04xMjMwLDEsMjAwNCxIw5hTVCwxLDEtMQ",
"kode": "1-1",
"navnAlleSprak": {
"nb": "Rettferdighet"
},
"timerPerUke": 2,
"timeplan": {
"nodes": [
{
"ukedag": {
"ukedagnummer": 1
},
"bygning": {
"kode": "AB"
},
"rom": {
"kode": "300",
"kapasitet": {
"undervisning": 30,
"eksamen": 10
}
},
"klokkeslett": {
"fra": "00:00:00+18:00",
"til": "00:00:00+18:00"
},
"undervisningsuker": []
}
]
}
},
{
"id": "MTIwOjEyMzQsMTg1LEVDT04xMjMwLDEsMjAwNCxIw5hTVCwxLDEtMg",
"kode": "1-2",
"navnAlleSprak": {
"nb": "Fordeling"
},
"timerPerUke": 4,
"timeplan": {
"nodes": [
{
"ukedag": {
"ukedagnummer": 2
},
"bygning": {
"kode": "ABU"
},
"rom": null,
"klokkeslett": {
"fra": "00:00:00+18:00",
"til": "00:00:00+18:00"
},
"undervisningsuker": []
},
{
"ukedag": {
"ukedagnummer": 4
},
"bygning": {
"kode": "AUDMAX"
},
"rom": {
"kode": "AUDMAX",
"kapasitet": {
"undervisning": 500,
"eksamen": 300
}
},
"klokkeslett": {
"fra": "00:00:00+18:00",
"til": "00:00:00+18:00"
},
"undervisningsuker": []
}
]
}
},
{
"id": "MTIwOjEyMzQsMTg1LEVDT04xMjMwLDEsMjAwNCxIw5hTVCwxLDI",
"kode": "2",
"navnAlleSprak": {
"nb": "Gruppeundervisning"
},
"timerPerUke": null,
"timeplan": {
"nodes": []
}
}
]
}
}
}

Rapportering av godkjent utenlandsopphold til Lånekassen

Dette endepunktet brukes kun av Lånekassen. Migrering til GraphQL vil skje i samarbeid med dem.

Synkronisering av data mellom FS og timeplanleggingssystemet TP

Dette endepunktet synkroniserer data mellom FS og timeplanleggingssystemet TP. Migrering til GraphQL vil skje i samarbeid med UiO.