# Polymorphisme

Il peut arriver qu’une ressource de type collection contienne plusieurs ressources de types légèrement différents. Par exemple, des produits de type différents : **livres** et **films**.

* Tout d’abord, il faut harmoniser le modèle de la ressource au maximum. Par exemple, livres et films ont un prix, il faut que ce soit la même propriété. Même si tel n’est pas le cas dans votre modèle de données *(Ex. scraping)*, créez des *computed fields*. On peut imaginer naïvement un *computed field* `price` qui calcule le prix à partir de la durée du film :).
* &#x20;Il suffit alors d’ajouter un *field* `type` au modèle de votre ressource *(qu’il faudra dûment documenté).*
* Cela permet ensuite côté client de *remapper* vers les classes associées.
* **L’abus de polymorphisme nuit gravement à la santé de votre API et de ses proches.**

```javascript
{
  "objects": [
    {
      "id": "1",
      "author": {"id": "3"},
      "price": {"amount": 10, "currency": "EUR"},
      "type": "book",
    },
    {
      "duration": 5400,
      "id": "2",
      "price": {"amount": 6, "currency": "USD"},
      "type": "movie"
   }
  ]
}
```

### Inheritance and Polymorphism with Swagger

<https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/>

{% embed url="<https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/>" %}


---

# 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/conventions-et-bonnes-pratiques/polymorphisme.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.
