# Support d'OpenAPI Specification 3.0

Concevez une API avec OpenAPI Specification (OAS) 3.0 via API Contracts.

OpenAPI Specification 3.0 offre de nouvelles fonctionnalités, apportant plus d'expressivité et de productivité aux concepteurs d'API.

Pour plus d'informations sur OpenAPI, consultez la [documentation Swagger](https://swagger.io/docs/specification/about/).

## Composants

Les composants vous permettent de réutiliser divers éléments au sein d'une API. Ces éléments peuvent être les suivants :

* Variables de chemin
* Paramètres de requête
* En-têtes
* Réponses

## Combinations

Les combinaisons vous permettent de créer un nouveau type de données en combinant plusieurs autres types de données. API Contracts supporte deux types de combinaisons :

* La composition (allOf) vous permet d'agréger des propriétés de schéma de différents schémas. Par exemple, vous pouvez définir un type de données Company en réutilisant toutes les propriétés des types existants Contact et Error. ![Exemple de composition.](https://help.qlik.com/fr-FR/cloud-services/Subsystems/Hub/Content/Resources/Images/ApiDesigner/all_of.png)
* Le polymorphisme (oneOf/anyOf) vous permet de créer une entité pouvant utiliser les propriétés de différents types de données.
  * oneOf vous permet de définir un type de données contenant des propriétés de l'un des types sélectionnés. Par exemple, si vous créez une opération pour obtenir des informations sur un compte de service, vous pouvez définir la réponse à l'aide de la combinaison oneOf pour obtenir soit toutes les propriétés de Error, soit toutes les propriétés de ServiceAccountCount. ![Exemple de polymorphisme.](https://help.qlik.com/fr-FR/cloud-services/Subsystems/Hub/Content/Resources/Images/ApiDesigner/oneof.png)

  * anyOf vous permet de définir un type de données contenant les propriétés d'un ou de plusieurs des types sélectionnés. Par exemple, vous pouvez définir un type de données nervousSystem et un type skeleton contenant des propriétés différentes, et utiliser la combinaison anyOf pour créer un type de données contenant toute propriété de l'un ou l'autre de ces types.

    Une combinaison anyOf est valide tant qu'elle contient tous les paramètres requis d'au moins un des types de données sélectionnés. L'exemple ci-dessous utilise la propriété brain\_weight du type nervousSystem et les propriétés skull\_height et teeth de skeleton.

    ![Exemple de combinaison utilisant les types de données nervousSystem et skeleton.](https://help.qlik.com/fr-FR/cloud-services/Subsystems/Hub/Content/Resources/Images/ApiDesigner/anyof.png)

Pour plus d'informations concernant la composition et le polymorphisme, consultez les articles [Inheritance and Polymorphism](https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/) et [Difference Between anyOf and oneOf](https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/#anyof-vs-oneof) (en anglais).

## Réponses

OAS 3.0 vous permet de définir de nouveaux types de réponses pour vos opérations :

* Plages de réponses : au lieu de définir une réponse telle que 200, vous pouvez la définir comme 2XX, afin qu'elle inclue les réponses de 200 à 299.
* Réponses par défaut : vous pouvez définir une réponse par défaut à renvoyer lorsqu'une réponse spécifique ou une plage de réponses n'est pas définie.

Les réponses définies avec un code explicite priment sur les plages de réponses et les réponses par défaut et les plages de réponses priment sur les réponses par défaut. Dans l'exemple suivant :

* La réponse 204 est définie et prime sur les autres.
* La réponse 2XX s'applique aux codes de réponse 200 à 203 et 205 à 299.
* La réponse par défaut s'applique à toutes les réponses 1XX, 3XX, 4XX et 5XX.

![Section Responses (Réponses).](https://help.qlik.com/fr-FR/cloud-services/Subsystems/Hub/Content/Resources/Images/ApiDesigner/responses-headers-api.png)

## Sécurité

OAS 3.0 apporte de nouveaux schémas de sécurité pour votre API :

* Authentification du porteur
* OpenIdConnect

## Restrictions

OAS 3.0 vous permet d'indiquer que certaines propriétés sont en lecture seule ou en écriture seule.

Cette option n'est disponible que dans les types de données et ne peut être définie dans des requêtes ou des réponses au niveau des opérations.

![Exemple de restriction.](https://help.qlik.com/fr-FR/cloud-services/Subsystems/Hub/Content/Resources/Images/ApiDesigner/designer_restrictions.png)