# Le Modèle de Maturité de Richardson

<https://www.crummy.com/writing/speaking/2008-QCon/act3.html> (2008)

![Le Modèle de Maturité de Richardson ou Web Service Maturity Heuristic](https://392424868-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFGxD_EMfiDhYN7-EXe%2F-LFHXrcKfsWCgVmlkFud%2F-LFHY0S7Schm5-P8_f6G%2Frichardson-maturity-model.png?alt=media\&token=74c854e2-367f-44b1-9cb2-8a9a5690ee3c)

**\*P.O.X.** : Plain Old XML

## Level 0 : The Swamp of POX

XML-RPC over HTTP.

![Plain Old XML](https://392424868-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFGxD_EMfiDhYN7-EXe%2F-LFHY9lrxBVlFEtHGnGi%2F-LFHYStIKWMcNN-JDcAh%2Fpox.png?alt=media\&token=d2c18922-047c-47a8-9d6e-44cfba261113)

![Tag Soup](https://392424868-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFGxD_EMfiDhYN7-EXe%2F-LFHZx2vtz6hBXRg-Sml%2F-LFHZyx8BCP7NmkN-DvI%2Ftag-soup.jpg?alt=media\&token=e8d10d7f-5226-4fd8-8dd6-ee366fc7dd3c)

![ReST vs SOAP](https://392424868-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFGxD_EMfiDhYN7-EXe%2F-LFHZx2vtz6hBXRg-Sml%2F-LFH_0qRtT67j0bzpzNZ%2Fstats_rest_soap.png?alt=media\&token=63913759-8124-4e07-92ed-d8c03aaacfac)

![](https://392424868-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFGxD_EMfiDhYN7-EXe%2F-LFHZx2vtz6hBXRg-Sml%2F-LFH_6-suTMlxY7l0qzj%2Fbye-bye-xml.jpg?alt=media\&token=b82a2360-0701-40fd-930d-bc92f08ce9e3)

## Level 1 : Resources

L’API respecte le modèle de données et chaque ressource peut être identifiée avec une URL.

```http
POST /blogs/11111/posts
POST /posts/22222/comments
GET /comments/33333
```

![Resources](https://392424868-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFGxD_EMfiDhYN7-EXe%2F-LFH_VBunFTHuyUiaXN_%2F-LFHa4dOVaQh_RXtd-yM%2Fwarehouse.png?alt=media\&token=99cf89d8-c7de-4896-967f-b66937914434)

## Level 2 : HTTP Verbs

Utilisation des méthodes HTTP autres que GET et POST pour signifier l’action souhaitée : PATCH / PUT / DELETE.

… et surtout les “status codes” HTTP pour résumer le résultat de l’opération :

**200** : OK\
**201** : Created\
**204** : No Content (delete)\
**400** : Bad Request\
**401** : Unauthorized\
**403** : Forbidden\
**404** : Not Found\
**409** : Conflict\
…

Bien sûr, les erreurs 4xx peuvent contenir un "body" avec des informations additionnelles.

{% hint style="info" %}
Utilisez le bon vocabulaire et évitez les APIs schtroumpf !

```http
SCHTROUMPF /q?data=select:*:from:carts
```

{% endhint %}

![What The Smurf!?](https://392424868-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LFGxD_EMfiDhYN7-EXe%2F-LFHaRww6_ni8OpbEmze%2F-LFHacbEddLsuWTzByMX%2Fsmurf.png?alt=media\&token=bd923848-4b1c-4346-b6c9-39fc1d821636)

## Level 3 : Hypermedia Controls

Hypermedia est l’une des principales règles de la thèse de Fielding.

L’idée est de retrouver dans les API ReST la même logique Hypermedia qu’en HTML par exemple. Aujourd’hui, cela se résume principalement par la présence de liens dans les ressources permettant de définir la relation avec d’autres ressources.

L’API ReST devient alors ***discoverable***.
