Ik heb een REST API waarbij ik eenzelfde resource zowel moet kunnen ophalen als aanmaken (GET en POST). De class/entity die deze resource omvat, heeft heel wat onderliggende relaties, welke voornamelijk overeenkomen met eenvoudige lookup tabellen (entities met enkel een "ID" en "name" property). Voor elk van deze lookup tabellen bestaat er ook een API endpoint/resource.
Ik vraag me nu af hoe ik dit best deze onderliggende relaties weergeef binnen de API. Stel volgend voorbeeld:
De product resource heeft een aantal tags en een enkele categorie. Omdat tags en categorieen aparte resources zijn, verwijs ik vanuit de product resource er enkel naar met hun naam. Hier heb ik een aantal bedenkingen bij.
Het is niet direct duidelijk voor de API client dat tags en category aparte resources zijn. Ik zou i.p.v. de naam de ID kunnen gebruiken (of er gewoon met de resource URL naar verwijzen, dan is het "echt" REST), maar dan moeten er extra calls gedaan worden om tags/categorieen op te halen (lijkt me verspilling voor simpelweg de naam).
Het tweede wat ik me afvraag is hoe ik het best producten aanmaak (POST). Stel nu dat ik zoals in mijn voorbeeld de naam gebruik voor tags en categorieen, gebruik ik dan best gewoonweg dezelfde json (DTO) voor het aanmaken van producten? Of vervang ik de naam dan best door de ID?
Kan iemand me misschien een voorbeeld van bestaande implementaties geven?
Ik vraag me nu af hoe ik dit best deze onderliggende relaties weergeef binnen de API. Stel volgend voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| /api/products/24545 { id: 24545, name: "product A", tags: [ "Tag A", "Tag B", "Tab C" ], category: "Category A" } /api/tags/9845 { id: 9845, name: "Tag A" } /api/categories/9845 { id: 9845, name: "Category A" } |
De product resource heeft een aantal tags en een enkele categorie. Omdat tags en categorieen aparte resources zijn, verwijs ik vanuit de product resource er enkel naar met hun naam. Hier heb ik een aantal bedenkingen bij.
Het is niet direct duidelijk voor de API client dat tags en category aparte resources zijn. Ik zou i.p.v. de naam de ID kunnen gebruiken (of er gewoon met de resource URL naar verwijzen, dan is het "echt" REST), maar dan moeten er extra calls gedaan worden om tags/categorieen op te halen (lijkt me verspilling voor simpelweg de naam).
Het tweede wat ik me afvraag is hoe ik het best producten aanmaak (POST). Stel nu dat ik zoals in mijn voorbeeld de naam gebruik voor tags en categorieen, gebruik ik dan best gewoonweg dezelfde json (DTO) voor het aanmaken van producten? Of vervang ik de naam dan best door de ID?
Kan iemand me misschien een voorbeeld van bestaande implementaties geven?