REST Api voor artikelen, met permissions. In django, standaard django auth backend + UI gebruiken voor users/groups/permissions SSL/HTTPS required (lets encrypt)
Voor een artikel zijn er 3 permissies:
- add
- change
- delete
Bij acties die een artikel aanpassen, wordt de juiste permissie gechecked. Permissie kan in de standaard django admin UI gegeven worden op user en/of groep niveau.
Elke call heeft altijd een "result" veld en bevat "ok" = ok, of de foutmelding.
Om te testen / ontwikkelen:
- pip3 install -r requirements.txt
- cp articleapi/settings.py.example articleapi/settings.py
- aanpassen settings.py naar wens (voor nu alleen SECRET_KEY invullen/aanpassen en evt. DATABASE als je geen sqlite wilt)
- ./migrate.py makemigrations
- ./migrate.py migrate (maakt sqlite database aan)
- ./migrate.py createsuperuser (maak de 1e admin account aan)
- ./migrate.py runserver
Nu draait er een debug servertje op localhost:8000 waartegen je kunt testen. ga naar http://localhost:8000/admin/ om users te beheren
input:
{
"username": "henk",
"password": "lol"
}
output:
{
"result": "ok",
"token": "kdjsfiowejiofjaioejfi"
}
curl example:
curl -X POST -v http://localhost:8000/api/v1/login --data '{"username": "ronald", "password": "lalala21"}'
input: none
Geeft de complete lijst met artikelen terug
output:
"result": "ok",
"articles": [
{ "1":
{
"subject": "Atikel onderwerp / headline",
"author": "henk",
... overige metadata die nodig is voor een lijst
},
"2":
{
"subject": "2e Artikel",
enz. enz...
}
}
]
}
curl example:
curl http://localhost:8000/api/v1/articles
input: none
output:
{
"result": "ok",
"article": {
"id": "<id>",
"subject": "Artikel onderwerp",
"body": "Artikel body",
... meer spannende artikel dingen
}
}
Nieuw artikel aanmaken Token moet van een user zijn met 'article add' permissions.
input:
{
"token": "<auth token>",
"subject": "Artikel onderwerp",
"body": "Artikel inhoud",
"author": "auteur"
}
output:
{
"result": "ok",
"id": "<nieuw aangemaakt article id>"
}
Artikel aanpassen Token moet van een user zijn met 'article change' permissions
input:
{
"token": "<auth token>",
"subject": "nieuw subject",
"body": "nieuwe body",
"author": "nieuwe auteur"
}
output:
{
"result": "ok"
}
curl example:
curl -X POST http://localhost:8000/api/v1/article/3 --data '{"token": "d4e9f218e9e44adeaf33cbbe66026ae3", "subject": "Artikel onderwerp aangepast", "body": "Artikel inhoud aangepast", "author": "blaat"}'
Artikel verwijderen Token moet van een user zijn met 'article delete' permissions
input: none
output:
{
"result": "ok"
}
curl example:
curl -X DELETE http://localhost:8000/api/v1/article/4 --data '{"token": "d4e9f218e9e44adeaf33cbbe66026ae3"}'