Voorbeeld 2: Bibliotheeksysteem
In dit voorbeeld maken we een API voor een bibliotheeksysteem met de volgende collecties:
- Books: een collectie van boeken met eigenschappen zoals titel, auteur, genre, ISBN, en beschikbaarheid
- Authors: een collectie van auteurs met biografische informatie
- Genres: een collectie van boekengenres voor categorisatie
- Members: een collectie van bibliotheekleden met lidmaatschapsinformatie
- Loans: een collectie van boekuitleningen met informatie over de leentermijn en retourstatus
Volledige JSON-configuratie
{ "collections": [ { "name": "books", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "title", "type": "string", "required": true, "min": 1, "max": 200 }, { "name": "authorId", "type": "reference:authors", "required": true }, { "name": "genreId", "type": "reference:genres", "required": true }, { "name": "isbn", "type": "string", "required": true, "min": 10, "max": 13 }, { "name": "price", "type": "number", "required": true, "min": 0 }, { "name": "available", "type": "boolean", "required": true, "default": true } ], "permissions": { "GET": [ "anonymous", "member", "editor", "admin" ], "POST": [ "admin", "editor" ], "PUT": [ "admin", "editor" ], "DELETE": [ "admin" ] } }, { "name": "authors", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "name", "type": "string", "required": true, "min": 2, "max": 100 }, { "name": "bio", "type": "string", "max": 2000 } ], "permissions": { "GET": [ "anonymous", "member", "editor", "admin" ], "POST": [ "admin", "editor" ], "PUT": [ "admin", "editor" ], "DELETE": [ "admin" ] } }, { "name": "genres", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "name", "type": "string", "required": true, "min": 2, "max": 50 }, { "name": "description", "type": "string", "max": 500 } ], "permissions": { "GET": [ "anonymous", "member", "editor", "admin" ], "POST": [ "admin" ], "PUT": [ "admin" ], "DELETE": [ "admin" ] } }, { "name": "members", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "name", "type": "string", "required": true, "min": 2, "max": 100 }, { "name": "email", "type": "string", "required": true, "min": 5, "max": 100 }, { "name": "membershipActive", "type": "boolean", "required": true, "default": true }, { "name": "joinDate", "type": "date", "required": true, "default": "CurrentDate" } ], "permissions": { "GET": [ "admin", "editor" ], "POST": [ "admin" ], "PUT": [ "admin", "editor" ], "DELETE": [ "admin" ] } }, { "name": "loans", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "memberId", "type": "reference:members", "required": true }, { "name": "bookId", "type": "reference:books", "required": true }, { "name": "loanDate", "type": "date", "required": true, "default": "CurrentDate" }, { "name": "returnDate", "type": "date", "required": true }, { "name": "returned", "type": "boolean", "required": true, "default": false } ], "permissions": { "GET": [ "member", "editor", "admin" ], "POST": [ "editor", "admin" ], "PUT": [ "editor", "admin" ], "DELETE": [ "admin" ] } } ], "users": [ { "email": "[email protected]", "password": "admin123", "roles": [ "admin" ] }, { "email": "[email protected]", "password": "medewerker123", "roles": [ "editor" ] }, { "email": "[email protected]", "password": "lid123", "roles": [ "member" ] } ], "data": { "genres": [ { "id": 1, "name": "Science Fiction", "description": "Toekomstgerichte fictie" }, { "id": 2, "name": "Fantasy", "description": "Fantasierijke verhalen" }, { "id": 3, "name": "Non-Fictie", "description": "Educatieve en informatieve boeken" }, { "id": 4, "name": "Thriller", "description": "Spannende verhalen" } ], "authors": [ { "id": 1, "name": "Isaac Asimov", "bio": "Russisch-Amerikaans schrijver van SF" }, { "id": 2, "name": "J.K. Rowling", "bio": "Britse schrijfster, bekend van Harry Potter" }, { "id": 3, "name": "Yuval Noah Harari", "bio": "Israelische historicus en auteur" } ], "books": [ { "id": 1, "title": "Foundation", "authorId": 1, "genreId": 1, "isbn": "9781234567890", "price": 19.99, "available": true }, { "id": 2, "title": "Harry Potter en de Steen der Wijzen", "authorId": 2, "genreId": 2, "isbn": "9781234567891", "price": 14.95, "available": false }, { "id": 3, "title": "Sapiens", "authorId": 3, "genreId": 3, "isbn": "9781234567892", "price": 24.50, "available": true } ], "members": [ { "id": 1, "name": "Jan Jansen", "email": "[email protected]", "membershipActive": true, "joinDate": "2024-01-15" }, { "id": 2, "name": "Maria de Vries", "email": "[email protected]", "membershipActive": true, "joinDate": "2024-02-20" } ], "loans": [ { "id": 1, "memberId": 1, "bookId": 2, "loanDate": "2024-03-01", "returnDate": "2024-03-21", "returned": false } ] } }
Belangrijkste kenmerken
- Boeken, auteurs en genres zijn publiekelijk zichtbaar (anonymous toegang)
- Ledeninformatie is alleen zichtbaar voor bibliotheekmedewerkers en beheerders
- Uitleningen zijn zichtbaar voor de leden zelf, medewerkers en beheerders
- Medewerkers kunnen boeken, auteurs en uitleningen beheren
- Alleen beheerders mogen items verwijderen