Le modèle de maturité de Richardson En 2008, Leonard Richardson propose un modèle en 4 niveaux pour mesurer à quel point une API exploite le web. Chaque niveau ajoute un des principes REST. Fil conducteur : dans l'API d'une bibliothèque, annuler la réservation 42 . Niveau 0 - Le marécage du POX (Plain Old XML) Une seule URL, une seule méthode ( POST ), et l'action est décrite dans le body. HTTP ne sert que de tuyau. C'est le cas de SOAP et de XML-RPC (POX : Plain Old XML ). POST /api Content-Type: application/json {"action": "cancelReservation", "reservationId": 42} HTTP/1.1 200 OK {"success": false, "error": "Livre déjà retiré"} Niveau 1 - Les ressources Chaque ressource a sa propre URL, mais on utilise encore POST pour tout, avec des verbes dans les URL. POST /api/reservations/42/cancel Niveau 2 - Les verbes et codes HTTP On utilise la bonne méthode HTTP pour chaque action, et les bons codes de statut. C'est le niveau de la grande majorité des API « REST ». DELETE /v1/reservations/42 HTTP/1.1 409 Conflict Niveau 3 - Les contrôles hypermédias Les réponses contiennent des liens vers les actions possibles. Le client n'a plus besoin de deviner les URL : il suit les liens. C'est HATEOAS . { "id": 42, "status": "waiting", "_links": { "self": {"href": "/v1/reservations/42"}, "cancel": {"href": "/v1/reservations/42", "method": "DELETE"}, "book": {"href": "/v1/livres/3"} } } Si le livre a déjà été retiré, le lien cancel n'apparaît plus : le client sait qu'il ne peut plus annuler, sans connaître les règles métier. Selon Fielding, seul le niveau 3 est vraiment REST. On y revient en détail au chapitre 9.