Strapi
Open-source Node.js headless CMS
Open-source: https://github.com/strapi/strapi
Headless
Traditioneel CMS: presentatie + data
Headless CMS: only data
Content Management System (CMS)
Platform to help manage web site/app content
Andere voorbeelden van CMS
Traditioneel: Wordpress, Drupal, Craft, Umbraco, Magento, Hubspot ...
Headless: ContentStack, Sanity, Hygraph, Prismic, Contentful, Ghost ...
Waarom CMS gebruiken?
Waarom CMS gebruiken?
Sneller en makkelijker om inhoud te beheren
Als inhoud snel wijzigt (blogs, webshops ...)
Vaak voor niet-developers (marketing, sales, product, administratie ...)
Herbruikbare componenten en logica
npx create-strapi@latest strapi-example1
Need to install the following packages:
create-strapi@5.12.7
Ok to proceed? Yes
? Please log in or sign up. Skip
? Do you want to use the default database (sqlite)? Yes
? Start with an example structure & data? No
? Start with Typescript? No
? Install dependencies with npm? Yes
? Initialize a git repository? Yes
cd strapi-example1
npm run develop
Maak een nieuw Strapi-project
Belangrijkste items uit de navigatiebalk:
Content Manager
Data beheren (CRUD)
Content-Type Builder
Datamodel beheren
Settings
Strapi
Even terug naar PGM3: relaties
Many-to-many
Indien dit ver zit: thuis herhalen!
Strapi heeft 3 data types:
Collection types: meerdere entries
taken, categorieën, gebruikers, projecten ...
Single types: één entry
paginatitel, instellingen ...
Components
valt momenteel buiten onze scope
Strapi
Opnieuw even terug naar PGM3: REST API
Welke API endpoints?
Opnieuw even terug naar PGM3: REST API
REST: welke API endpoints?
GET /students
GET /students/:id
POST /students
PUT /students/:id
PATCH /students/:id
DELETE /students/:id
GET /students
GET /students/:id
POST /students
PUT /students/:id
PATCH /students/:id
DELETE /students/:id
http://localhost:1337/api/{pluralApiId}
http://localhost:1337/api/students
GET http://localhost:1337/api/students
Test of dit werkt zoals verwachtGET /students (OK!)
GET /students/:documentId
POST /students
PUT /students/:documentId
PATCH /students/:id
DELETE /students/:documentId
Strapi
We hebben voorlopig 1 collection type:
Students
Voeg een nieuwe collection type toe:
Classes
1 veld: name (text - required + unique)
Voeg 4 klassen toe via Content Manager:
A, B1, B2, C
Hoe definiëren we de relatie tussen beide?
Hoe definiëren we de relatie tussen beide?
A class has many students
Via Content Manager: update de data van studenten zodat ze allemaal tot een klas behoren
Voer nogmaals de API call uit om alle studenten op te halen. Kan je zien in welke klas ze zitten?
Standaard geeft Strapi geen gerelateerde data terug
Oplossing: populate query parameter
http://localhost:1337/api/students?populate=*
id
{
"data": {
"firstName": "Judd",
"lastName": "Trump",
"age": 39,
"studentNumber": "7889423719",
"class": 2
}
}
Strapi
Strapi
We kunnen de data van onze REST API ook filteren
Voeg nog een aantal studenten toe zodat je er minstens 10 hebt
Oefening: maak nieuwe requests in Thunder Client
Alle studenten ouder dan 25
Alle studenten jonger dan of gelijk aan 25
Alle studenten exact 20 jaar oud
Filteren op gerelateerde data noemen we
deep filtering
Oefening: maak een nieuwe request in Thunder Client
Haal alle studenten op uit klas A
We kunnen de data ook sorteren
Oefening: maak een nieuwe request in Thunder Client
Sorteer alle studenten volgens leeftijd (jong -> oud)
Maak een nieuwe request voor oud -> jong
Strapi
Respons van /api/students ->
meta.pagination
page
pageSize
pageCount
total
page
Huidige pagina
pageSize
Aantal items per pagina
pageCount
Totaal aantal pagina's
total
Totaal aantal items
Standaard geeft Strapi de eerste 25 items terug (= pagina 1)
Meer items nodig?
Volgende pagina opvragen
Paginagrootte aanpassen
Query parameters
npm run dev
App
)App