Utiliser les définitions OpenAPI pour les API HTTP dans API Gateway - APIPasserelle Amazon

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser les définitions OpenAPI pour les API HTTP dans API Gateway

Vous pouvez définir votre API HTTP à l'aide d'un fichier de définition OpenAPI 3.0. Ensuite, vous pouvez importer la définition dans API Gateway pour créer une API. Pour en savoir plus sur les extensions API Gateway vers OpenAPI, veuillez consulter APIExtensions ouvertes pour API Gateway.

Importation d'une API HTTP

Vous pouvez créer une API HTTP en important un fichier de définition OpenAPI 3.0.

Pour migrer d'une API REST vers une API HTTP, vous pouvez exporter votre API REST en tant que fichier de définition OpenAPI 3.0. Ensuite, importez la définition de l'API en tant qu'API HTTP. Pour en savoir plus sur l'exportation d'une API REST, veuillez consulter Exporter un REST API fichier depuis API Gateway.

Note

Les API HTTP prennent en charge les mêmes AWS variables que les API REST. Pour en savoir plus, consultez la section AWS variables pour Open API import.

Importer des informations de validation

Lorsque vous importez une API, API Gateway fournit trois catégories d'informations de validation.

Infos

Une propriété est valide selon la spécification OpenAPI, mais cette propriété n'est pas prise en charge pour les API HTTP.

Par exemple, l'extrait OpenAPI 3.0 suivant produit des informations sur l'importation, car les API HTTP ne prennent pas en charge la validation de la demande. API Gateway ignore les champs requestBody et schema.

"paths": { "/": { "get": { "x-amazon-apigateway-integration": { "type": "AWS_PROXY", "httpMethod": "POST", "uri": "arn:aws:lambda:us-east-2:123456789012:function:HelloWorld", "payloadFormatVersion": "1.0" }, "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Body" } } } } } } ... }, "components": { "schemas": { "Body": { "type": "object", "properties": { "key": { "type": "string" } } } ... } ... }
Avertissement

Une propriété ou une structure n'est pas valide selon la spécification OpenAPI, mais elle ne bloque pas la création d'API. Vous pouvez spécifier si API Gateway doit ignorer ces avertissements et continuer à créer l'API, ou arrêter de créer l'API sur les avertissements.

Le document OpenAPI 3.0 suivant produit des avertissements lors de l'importation, car les API HTTP ne prennent en charge que les intégrations proxy Lambda et proxy HTTP.

"x-amazon-apigateway-integration": { "type": "AWS", "httpMethod": "POST", "uri": "arn:aws:lambda:us-east-2:123456789012:function:HelloWorld", "payloadFormatVersion": "1.0" }
Erreur

La spécification OpenAPI n'est pas valide ou mal formée. API Gateway ne peut pas créer de ressources à partir du document mal formé. Vous devez corriger les erreurs, puis réessayer.

La définition d'API suivante génère des erreurs lors de l'importation, car les API HTTP ne prennent en charge que la spécification OpenAPI 3.0.

{ "swagger": "2.0.0", "info": { "title": "My API", "description": "An Example OpenAPI definition for Errors/Warnings/ImportInfo", "version": "1.0" } ... }

Autre exemple, alors qu'OpenAPI permet aux utilisateurs de définir une API avec plusieurs exigences en matière de sécurité liées à une opération particulière, API Gateway ne prend pas en charge cette fonctionnalité. Chaque opération ne peut avoir qu'un seul des éléments suivants : autorisation IAM, mécanisme d'autorisation Lambda ou mécanisme d'autorisation JWT. Tenter de modéliser plusieurs exigences de sécurité entraîne une erreur.

Importez une API à l'aide du AWS CLI

La commande suivante importe le fichier de définition OpenAPI 3.0 api-definition.json en tant qu'API HTTP.

aws apigatewayv2 import-api --body file://api-definition.json

Vous pouvez importer l'exemple suivant de définition OpenAPI 3.0 pour créer une API HTTP.

{ "openapi": "3.0.1", "info": { "title": "Example Pet Store", "description": "A Pet Store API.", "version": "1.0" }, "paths": { "/pets": { "get": { "operationId": "GET HTTP", "parameters": [ { "name": "type", "in": "query", "schema": { "type": "string" } }, { "name": "page", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "200 response", "headers": { "Access-Control-Allow-Origin": { "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Pets" } } } } }, "x-amazon-apigateway-integration": { "type": "HTTP_PROXY", "httpMethod": "GET", "uri": "http://petstore.execute-api.us-west-1.amazonaws.com/petstore/pets", "payloadFormatVersion": 1.0 } }, "post": { "operationId": "Create Pet", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NewPet" } } }, "required": true }, "responses": { "200": { "description": "200 response", "headers": { "Access-Control-Allow-Origin": { "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NewPetResponse" } } } } }, "x-amazon-apigateway-integration": { "type": "HTTP_PROXY", "httpMethod": "POST", "uri": "http://petstore.execute-api.us-west-1.amazonaws.com/petstore/pets", "payloadFormatVersion": 1.0 } } }, "/pets/{petId}": { "get": { "operationId": "Get Pet", "parameters": [ { "name": "petId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "200 response", "headers": { "Access-Control-Allow-Origin": { "schema": { "type": "string" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Pet" } } } } }, "x-amazon-apigateway-integration": { "type": "HTTP_PROXY", "httpMethod": "GET", "uri": "http://petstore.execute-api.us-west-1.amazonaws.com/petstore/pets/{petId}", "payloadFormatVersion": 1.0 } } } }, "x-amazon-apigateway-cors": { "allowOrigins": [ "*" ], "allowMethods": [ "GET", "OPTIONS", "POST" ], "allowHeaders": [ "x-amzm-header", "x-apigateway-header", "x-api-key", "authorization", "x-amz-date", "content-type" ] }, "components": { "schemas": { "Pets": { "type": "array", "items": { "$ref": "#/components/schemas/Pet" } }, "Empty": { "type": "object" }, "NewPetResponse": { "type": "object", "properties": { "pet": { "$ref": "#/components/schemas/Pet" }, "message": { "type": "string" } } }, "Pet": { "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string" }, "price": { "type": "number" } } }, "NewPet": { "type": "object", "properties": { "type": { "$ref": "#/components/schemas/PetType" }, "price": { "type": "number" } } }, "PetType": { "type": "string", "enum": [ "dog", "cat", "fish", "bird", "gecko" ] } } } }