# ReSTful donc Stateless

## Stateless ?

Supposons le scénario d’échange suivant. Est-il *stateless* ?

{% tabs %}
{% tab title="🧐" %}

```http
GET /init
GET /select-cart?cartId=123ab
POST /add-product
POST /add-product
POST /update-product-count?productId=12345
GET /cart-summary
POST /pay
```

{% endtab %}

{% tab title="👍" %}
![No!](/files/-LFHc9byHnBum0PIt9eL)
{% endtab %}
{% endtabs %}

## Limites et Difficultés du Stateful

* L’effet "**never-click-back!**".
* Problèmes de "load balancing".
* Comment paralléliser l’ajout de deux produits dans deux paniers différents ?
* Comment mettre la ressource "/cart-summary" en cache.
* API peu intuitive et peu extensible.

## Exemple Stateless

```
POST /carts/123ab/items
POST /carts/456cb/items
PATCH /items/33333
POST /carts/123ab/payments
GET /carts/123ab
```

## Les Avantages de l'Approche Stateless

* Pas de session à maintenir et donc pas de problème de *load balancing*.
* Moins de requêtes.
* Il est possible de paralléliser les requêtes.
* *Cacheable*.
* API intuitive et extensible.
  * L’API est human readable *(pas besoin d’avoir la documentation en permanence sous les yeux)*.
  * L’API est facile à étendre *(ajout de propriétés par exemple)*.
  * L’API peut répondre facilement à des besoins qui n’ont pas été anticipé *(modification du nombre de produits dans le panier par exemple)*.

En général, on peut comparer les approches stateful et stateless à la **métaphore de la destination géographique**.

Exemple :

* Coordonnées GPS d'un lieu.\
  \
  vs.<br>
* Les indications pour s'y rendre :
  * Tournez à droite.
  * à 100m à gauche.
  * Au rond-point (s’il n’a pas changé depuis), sortez à la 3ème sortie.
  * Admirez la vue sur votre gauche
  * …


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://guide-api-rest.marmicode.fr/api-rest/restful-donc-stateless.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
