Ontwerp
De OOAPI haalt gegevens op uit de OU-database en zet die om naar het juiste formaat. Ik gebruik aparte onderdelen voor het ontvangen van requests, ophalen van data en mappen van velden.
| Eis | Onderdeel in mijn ontwerp | Bestand in de code |
|---|---|---|
| Courses ophalen | Lijst- en detailfunction met CourseDto | Functions/Course.cs |
| Programmes ophalen | Lijst- en detailfunction met ProgrammeDto | Functions/Programmes.cs |
| Organisations ophalen | Lijst- en detailfunction met OrganisationDto | Functions/Organisations.cs |
| JWT en rollen | Middleware en Reader-attributen | Middleware.cs en de functions |
| Paging en filtering | Queryparameters verwerken in de ophaallogica | Services/ProductService.cs en Functions/Organisations.cs |
| Velden mappen | Bronvelden naar DTO-velden omzetten | MappingProfiles.cs |
| Extra organisatiegegevens | expand=organisation verwerken | Services/ProductService.cs |
| Alleen lezen | De zes routes gebruiken GET | De drie functionbestanden |
De functions, middleware en services staan in het Retriever-project. De DTO’s staan in het Core-project.
Een lijst of één object
Bij een lijst geef ik items en paging terug. Bij een detailrequest geef ik één object terug, bijvoorbeeld een course met een courseId. Courses en programmes gebruiken allebei ProductService, omdat ze uit dezelfde soort productgegevens komen.

In deze screenshot zie je de paging, items en course-velden terug. Het ontwerp van de Azure-keten en de modellen staat in mijn drie schema’s.
Uitbreidingen
Offerings zijn vervolgwerk. Ze zijn niet nodig voor de drie basisonderdelen. Ik werk eerst de benodigde bronvelden en relaties uit voordat ik daar endpoints voor maak.
Mapping naast mijn ontwerp

Dit is de bestaande mappingpagina uit de wiki. Bij de pagina staat Roger en 16 augustus 2024. De tabel laat zien welke bronvelden bij de OOAPI-velden horen. Ik kan die naast OrganisationDto en MappingProfiles leggen:
| Bron / afspraak in de wiki | OOAPI-veld |
|---|---|
| FACULTIES_ID | primaryCode.code |
| Vaste waarde faculty | organisationType |
| LANGUAGE_ID naar taalcode, samen met NAME | name |
| SHORT_NAME | shortName |
| Bron nog als vraagteken | organisationId |
Voor organisationId is dus nog een keuze over de bron nodig. De screenshot is een ontwerpuitgangspunt, geen bewijs dat alle mapping al correct is uitgevoerd.
Voorbeeld uit de mappingcode
In MappingProfiles.cs staat hoe faculteitsgegevens een organisation worden:
CreateMap<FACULTIES_DESCRIPTION, OrganisationDto>()
.ForMember(dest => dest.PrimaryCode, opt => opt.MapFrom(src => new IdentifierEntry { Code = Convert.ToString(src.FACULTIES_ID), CodeType = "organisation_id" }))
.ForMember(dest => dest.OrganisationType, opt => opt.MapFrom(src => "faculty"))
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => new List<LanguageTypedString> { new() { Language = Convert.ToString(src.LANGUAGE_ID), Value = src.NAME } }))
.ForMember(dest => dest.ShortName, opt => opt.MapFrom(src => src.SHORT_NAME));
Hier wordt FACULTIES_ID de code in primaryCode. Het type is faculty, NAME wordt de naam en SHORT_NAME de korte naam. Zo kan ik de tabel hierboven naast de code leggen.