Internet of Things/Protocollen/REST

Uit Lab
Naar navigatie springen Naar zoeken springen

REST (Representational State Transfer)

REST is een manier om te gebruiken, in het bijzonder voor het organiseren van server-interfaces voor webdiensten. Het is geen "standaard" zoals HTTP een standaard is. Je kunt dit ook beschouwen als de "architectuur-principes" van het web.

Aan de hand van deze principes kun je het interface van een webdienst (web service) inrichten. Dit heet wel een RESTful interface. Hierbij heeft elke combinatie van HTTP-methode en URL een eigen rol. Hiermee kun je de database-operaties CRUD (Create, Read, Update, Delete) uitvoeren op de beschrijvingen van de "resources" die de server beheert.

De "Update" van een element of een collectie kan gedaan worden als een "Replace" (via PUT). Deze vorm is idempotent: het maakt niet uit of je deze eenmaal of meerdere malen achtereen uitvoert. Dit is voor een webinterface een aantrekkelijke eigenschap, omdat er soms transacties in de communicatie verloren gaan.

Uit Wikipedia (https://en.wikipedia.org/wiki/Representational_state_transfer)

HTTP methods
Uniform Resource Locator (URL) GET PUT POST DELETE
Collection, such as http://api.example.com/resources/ List the URIs and perhaps other details of the collection's members. Replace the entire collection with another collection. Create a new entry in the collection. The new entry's URI is assigned automatically and is usually returned by the operation. Delete the entire collection.
Element, such as http://api.example.com/resources/item17 Retrieve a representation of the addressed member of the collection, expressed in an appropriate Internet media type. Replace the addressed member of the collection, or if it does not exist, create it. Not generally used. Treat the addressed member as a collection in its own right and create a new entry within it. Delete the addressed member of the collection.

GET is een "safe method", ofwel nullipotent), deze heeft geen zij-effecten: het opvragen van een record verandert dit record niet. meaning that calling it produces no side-effects: retrieving or accessing a record does not change it. The PUT and DELETE methods are idempotent, meaning that the state of the system exposed by the API is unchanged no matter how many times the same request is repeated.

JSON

Voor de uitwisseling van data met een RESTful interface wordt vaak het JSON formaat gebruikt. Dit heeft het voordeel dat het in veel omgevingen (programmeertalen, databases, browsers, e.d.) eenvoudig te gebruiken is. Je kunt het JSON-formaat eenvoudig omzetten in een JavaScript- of Python-object, of omgekeerd. Je kunt dit eenvoudig in een database opslaan, in het bijzonder in een "noSQL" database zoals MongoDB of CouchDB.

Linked Data

Voor de relaties tussen de documenten (records) kun je een linked-data formaat gebruiken, zoals JSON-LD. (Zie http://json-ld.org/)