Les extensions Swagger d'API Gateway sont basées sur Swagger 2.0. Utilisez ces extensions pour rédiger les définitions Swagger de vos API, puis importez le fichier Swagger dans API Gateway afin de créer ou de mettre à jour des API par lots. API Gateway est préconfiguré pour Swagger 2.0 et prend en charge la majeure partie de la spécification Swagger, bien que certaines différences subsistent.
Méthodes d'importation Swagger
Swagger est une spécification permettant de décrire les définitions d'API. Elle est largement utilisée pour définir et décrire les API des services d'applications backend. API Gateway prend en charge l'importation d'un fichier Swagger 2.0 pour créer des API. Appelez l'opération ImportSwagger ou effectuez cette opération depuis la console.
Dans le volet de navigation de gauche de la console API Gateway, choisissez API Management > API List. Ensuite, cliquez sur Import Swagger dans le coin supérieur droit de la page.
Les sections suivantes décrivent les extensions API Gateway pour Swagger et fournissent des exemples illustrant leur utilisation.
Tous les paramètres et valeurs dans Swagger sont sensibles à la casse.
Extensions Swagger
Les extensions Swagger d'API Gateway étendent principalement l'objet natif Operation Object de Swagger pour ajouter des fonctionnalités d'authentification, de mappage de paramètres et de service backend. Une extension pour la méthode ANY est également fournie afin de capturer les requêtes HTTP utilisant n'importe quelle méthode. Toutes les extensions commencent par x-aliyun-apigateway-. Les sections suivantes décrivent chaque extension.
Prise en charge de la portée globale
Les extensions suivantes prennent en charge les définitions au niveau de la portée globale. Si une extension n'est pas définie dans sa propre portée, la valeur définie au niveau global est automatiquement appliquée. Si l'extension est définie dans sa propre portée, la valeur de cette portée est prioritaire.
x-aliyun-apigateway-backendx-aliyun-apigateway-api-market-enablex-aliyun-apigateway-api-force-nonce-checkx-aliyun-apigateway-parameter-handlingx-aliyun-apigateway-auth-type
x-aliyun-apigateway-auth-type : Type d'autorisation
x-aliyun-apigateway-auth-type s'applique à l'objet Operation Object et spécifie le type d'autorisation de l'API.
Valeurs valides :
APP(par défaut) : autorisation d'application par Alibaba Cloud API Gateway.ANONYMOUS: accès anonyme. Exemple :
...
paths:
'path/':
get:
x-aliyun-apigateway-auth-type: ANONYMOUS
...
x-aliyun-apigateway-api-market-enable : Prise en charge d'Alibaba Cloud Marketplace
x-aliyun-apigateway-api-market-enable s'applique à l'objet Operation Object et indique si l'API peut être publiée sur Alibaba Cloud Marketplace.
Valeurs valides :
truefalse(par défaut). Exemple :
...
paths:
'path/':
get:
x-aliyun-apigateway-api-market-enable: true
...
x-aliyun-apigateway-api-force-nonce-check : Vérification NONCE
x-aliyun-apigateway-api-force-nonce-check s'applique à l'objet Operation Object et indique s'il faut appliquer une vérification NONCE pour l'API.
Valeurs valides :
truefalse(par défaut). Exemple :
...
paths:
'path/':
get:
x-aliyun-apigateway-api-force-nonce-check: true
...
x-aliyun-apigateway-parameter-handling : Mappage des paramètres
x-aliyun-apigateway-parameter-handling s'applique à l'objet Operation Object et spécifie comment les paramètres de requête sont mappés aux paramètres du service backend. Si la relation de mappage est définie sur PASSTHROUGH, l'objet Parameter Object ne prend pas en charge les propriétés x-aliyun-apigateway-backend-location et x-aliyun-apigateway-backend-name.
Valeurs valides :
PASSTHROUGH(par défaut) : transmet les paramètres de requête tels quels.MAPPING: mappe les paramètres de requête. Exemple :
...
paths:
'path/':
get:
x-aliyun-apigateway-parameter-handling: MAPPING
...
x-aliyun-apigateway-backend : Type de service backend
x-aliyun-apigateway-backend s'applique à l'objet Operation Object et configure les informations relatives au service backend. Les propriétés disponibles dépendent du type de service backend, comme décrit dans les sections suivantes.
Type de service backend : HTTP
Utilisez le type de service backend HTTP pour configurer directement l'adresse du service backend. Ce type est généralement utilisé lorsque l'adresse backend est directement accessible.
Le tableau suivant décrit les propriétés du type de service backend HTTP.
| Propriété | Type | Description |
| type | string | Obligatoire. La valeur est HTTP. |
| address | string | Obligatoire. Identifie l'adresse du service backend. |
| path | string | Facultatif. Identifie le chemin d'accès du service backend. Les variables de chemin sont prises en charge. Par défaut, cette valeur est identique au chemin racine. |
| method | string | Obligatoire. La méthode de requête backend. |
| timeout | int | Facultatif. Valeur par défaut : 10000. Valeurs valides : 500 à 30000. |
Exemple :
...
x-aliyun-apigateway-backend:
type: HTTP
address: 'http://www.aliyun.com'
path: '/builtin/echo'
method: get
timeout: 10000
...
Type de service backend : HTTP-VPC
Utilisez le type de service backend HTTP-VPC lorsque le service backend réside dans un VPC. Vous devez d'abord créer une autorisation VPC, puis importer l'autorisation par son nom. Pour plus d'informations, consultez la rubrique Création d'une API utilisant une ressource dans un VPC comme service backend.
Le tableau suivant décrit les propriétés du type de service backend HTTP-VPC.
| Propriété | Type | Description |
| type | string | Obligatoire. La valeur est HTTP-VPC. |
| vpcAccessName | string | Obligatoire. Le nom de l'instance connectée au VPC utilisée par le service backend. |
| path | string | Facultatif. Identifie le chemin d'accès du service backend. Les variables de chemin sont prises en charge. Par défaut, cette valeur est identique au chemin racine. |
| method | string | Obligatoire. La méthode de requête backend. |
| timeout | int | Facultatif. Valeur par défaut : 10000. Valeurs valides : 500 à 30000. |
Exemple :
...
x-aliyun-apigateway-backend:
type: HTTP-VPC
vpcAccessName: vpcAccess1
path: '/users/{userId}'
method: GET
timeout: 10000
...
Type de service backend : FC
Utilisez le type de service backend FC lorsque le service backend d'API Gateway est Function Compute.
Le tableau suivant décrit les propriétés du type de service backend FC.
| Propriété | Type | Description |
| type | string | Obligatoire. La valeur est FC. |
| fcRegion | string | Obligatoire. La région dans laquelle réside Function Compute. |
| serviceName | string | Obligatoire. Le nom du service Function Compute. |
| functionName | string | Obligatoire. Le nom de la fonction Function Compute. |
| arn | string | Facultatif. L'autorisation RAM pour Function Compute. |
Exemple :
...
x-aliyun-apigateway-backend:
type: FC
fcRegion: cn-shanghai
serviceName: fcService
functionName: fcFunction
arn: acs:ram::111111111:role/aliyunapigatewayaccessingfcrole
...
Type de service backend : MOCK
Utilisez le type de service backend MOCK pour simuler la réponse que vous avez prédéfinie.
Le tableau suivant décrit les propriétés du type de service backend MOCK.
| Propriété | Type | Description |
| type | string | Obligatoire. La valeur est MOCK. |
| mockResult | string | Obligatoire. La réponse simulée. |
| mockStatusCode | integer | Facultatif. |
| mockHeaders | Header | Facultatif. |
Le tableau suivant décrit les propriétés du type Header.
| Propriété | Type | Description |
| name | string | Obligatoire. |
| value | string | Obligatoire. |
Exemple :
...
x-aliyun-apigateway-backend:
type: MOCK
mockResult: mock resul sample
mockStatusCode: 200
mockHeaders:
- name: server
value: mock
- name: proxy
value: GW
...
x-aliyun-apigateway-constant-parameters : Paramètres constants
x-aliyun-apigateway-constant-parameters s'applique à l'objet Operation Object et définit les paramètres constants du service backend.
Le tableau suivant décrit les propriétés d'un paramètre constant.
| Propriété | Type | Description |
| backendName | string | Obligatoire. Le nom du paramètre backend. |
| value | string | Obligatoire. La valeur constante. |
| location | string | Obligatoire. L'emplacement où le paramètre constant est stocké. Valeurs valides : query et header. |
| description | string | Facultatif. Décrit la constante. |
Exemple :
...
x-aliyun-apigateway-constant-parameters:
- backendName: swaggerConstant
value: swaggerConstant
location: header
description: description of swagger
...
x-aliyun-apigateway-system-parameters : Paramètres système backend
x-aliyun-apigateway-system-parameters s'applique à l'objet Operation Object et définit les paramètres système du service backend de l'API.
Le tableau suivant décrit les propriétés d'un paramètre système backend.
| Propriété | Type | Description |
| systemName | string | Obligatoire. Le nom du paramètre système. |
| backendName | string | Obligatoire. Le nom du paramètre backend. |
| location | string | Obligatoire. L'emplacement où le paramètre constant est stocké. Valeurs valides : query et header. |
Exemple :
...
x-aliyun-apigateway-system-parameters:
- systemName: CaAppId
backendName: appId
location: header
...
x-aliyun-apigateway-backend-location : Emplacement du paramètre backend
x-aliyun-apigateway-backend-location s'applique à l'objet Parameter Object et spécifie l'emplacement du paramètre dans la requête du service backend après le mappage des paramètres. Cette propriété prend effet uniquement lorsque x-aliyun-apigateway-parameter-handling: MAPPING est défini.
Valeurs valides :
pathheaderqueryformDataExemple :
...
parameters:
- name: swaggerHeader
in: header
required: false
type: number
format: double
minimum: 0.1
maximum: 0.5
x-aliyun-apigateway-backend-location: query
x-aliyun-apigateway-backend-name: backendQuery
...
x-aliyun-apigateway-backend-name : Nom du paramètre backend
x-aliyun-apigateway-backend-name s'applique à l'objet Parameter Object et spécifie le nom du paramètre dans la requête du service backend après le mappage des paramètres. Cette propriété prend effet uniquement lorsque x-aliyun-apigateway-parameter-handling: MAPPING est défini.
Exemple :
...
parameters:
- name: swaggerHeader
in: header
required: false
type: number
format: double
minimum: 0.1
maximum: 0.5
x-aliyun-apigateway-backend-location: query
x-aliyun-apigateway-backend-name: backendQuery
...
x-aliyun-apigateway-query-schema : Schéma de paramètre de requête
x-aliyun-apigateway-query-schema s'applique à l'objet Parameter Object et définit un modèle pour un paramètre de requête. Vous pouvez utiliser cette extension lorsqu'un paramètre est de type String et est défini comme paramètre de requête.
Exemple :
...
parameters:
- name: event_info
in: query
required: true
type: string
x-aliyun-apigateway-query-schema:
$ref: "#/definitions/EvnetInfo"
...
x-aliyun-apigateway-any-method : Méthode ANY
x-aliyun-apigateway-any-method s'applique à l'objet Path Item Object et permet à l'API d'accepter des requêtes HTTP de tout type.
Exemple :
...
paths:
'path/':
x-aliyun-apigateway-any-method:
...
...
x-aliyun-apigateway-app-code-type : Authentification AppCode
x-aliyun-apigateway-app-code-type s'applique à l'objet Operation Object et indique si l'API prend en charge l'authentification AppCode.
Valeurs valides :
DEFAULT(par défaut)DISABLE: désactive l'authentification AppCode.HEADER: transmet l'AppCode dans un en-tête de requête.HEADER_QUERY: transmet l'AppCode dans un en-tête de requête ou un paramètre de requête. Exemple :
...
paths:
'path/':
get:
x-aliyun-apigateway-app-code-type: HEADER
...
Différences par rapport à la spécification Swagger
API Gateway et la spécification Swagger diffèrent sur les points suivants lors de la définition des API. Ces différences affectent directement l'utilisation de la fonctionnalité d'importation Swagger.
Mappage entre les types de paramètres Swagger et les types originaux d'API Gateway
| Type Swagger | Type API Gateway | Paramètres et règles de validation pris en charge |
type: integer, format: int32 |
Int | minimum, maximum |
type: integer, format: int64 |
Long | minimum, maximum |
type: number, format: float |
Float | minimum, maximum |
type: number, format: double |
Double | minimum, maximum |
type: string |
String | maxLength, enumValues, pattern |
type: boolean, format: boolean |
Boolean | - |
Prise en charge du champ consumes
Si un fichier de configuration Swagger contient des paramètres formData, vous devez configurer le nœud consumes. API Gateway prend actuellement en charge uniquement le type application/x-www-form-urlencoded.
consumes:
- application/x-www-form-urlencoded
Restrictions sur les définitions Swagger
L'importation Swagger prend en charge les définitions de modèles, mais l'implémentation diffère de la spécification Swagger originale. Les définitions de modèles sont principalement utilisées pour générer des kits de développement logiciel (SDK). Par conséquent, les restrictions suivantes s'ajoutent à la spécification Swagger originale :
La balise
schemadans Swagger prend en charge uniquement le type$ref.Un modèle dans la section
definitionsde Swagger prend en charge uniquement les définitions de modèles de type objet.Si un modèle dans la section
definitionsde Swagger contient une définition de tableau, la référence$refdoit être utilisée conjointement avec la balisetitle. Par défaut, un type tableau est généré sous forme d'ArrayListlors de la génération du SDK.
Exemples Swagger
Les exemples suivants sont des définitions Swagger complètes utilisant les extensions Swagger d'API Gateway. Utilisez-les comme point de départ lorsque vous définissez vos propres API.
Les exemples sont fournis à titre indicatif uniquement.
Exemple Swagger : Service backend HTTP
swagger: '2.0'
basePath: /
info:
version: '0.9'
title: Aliyun Api Gateway Swagger Sample
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: MAPPING
x-aliyun-apigateway-api-market-enable: true
x-aliyun-apigateway-api-force-nonce-check: true
x-aliyun-apigateway-backend:
type: HTTP
address: 'http://www.aliyun.com'
method: get
timeout: 10000
paths:
'/http/get/mapping/{userId}':
get:
operationId: case1
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: MAPPING
x-aliyun-apigateway-api-market-enable: true
x-aliyun-apigateway-auth-type: ANONYMOUS
parameters:
- name: userId
in: path
required: true
type: string
- name: swaggerQuery
in: query
required: false
default: '123465'
type: integer
format: int32
minimum: 0
maximum: 100
- name: swaggerHeader
in: header
required: false
type: number
format: double
minimum: 0.1
maximum: 0.5
x-aliyun-apigateway-backend-location: query
x-aliyun-apigateway-backend-name: backendQuery
x-aliyun-apigateway-constant-parameters:
- backendName: swaggerConstant
value: swaggerConstant
location: header
description: description of swagger
x-aliyun-apigateway-system-parameters:
- systemName: CaAppId
backendName: appId
location: header
responses:
'200':
description: 200 description
'400':
description: 400 description
'/echo/test/post/{userId}':
post:
operationId: testpost
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: MAPPING
x-aliyun-apigateway-backend:
type: HTTP
address: 'http://www.aliyun.com'
method: post
timeout: 10000
consumes:
- application/x-www-form-urlencoded
parameters:
- name: userId
required: true
in: path
type: string
- name: swaggerQuery1
in: query
required: false
default: '123465'
type: integer
format: int32
minimum: 0
maximum: 100
x-aliyun-apigateway-enum: 1,2,3
- name: swaggerQuery2
in: query
required: false
type: string
x-aliyun-apigateway-backend-location: header
x-aliyun-apigateway-backend-name: backendHeader
x-aliyun-apigateway-query-schema:
$ref: '#/definitions/AiGeneratePicQueryVO'
- name: swaggerHeader
in: header
required: false
type: number
format: double
minimum: 0.1
maximum: 0.5
x-aliyun-apigateway-backend-location: query
x-aliyun-apigateway-backend-name: backendQuery
- name: swaggerFormdata
in: formData
required: true
type: string
responses:
'200':
description: 200 description
schema:
$ref: '#/definitions/ResultOfGeneratePicturesVO'
'400':
description: 400 description
x-aliyun-apigateway-any-method:
operationId: case2
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: MAPPING
x-aliyun-apigateway-backend:
type: HTTP
address: 'http://www.aliyun.com'
path: '/builtin/echo/{abc}'
method: post
timeout: 10000
parameters:
- name: userId
in: path
required: false
default: '123465'
type: integer
format: int32
minimum: 0
maximum: 100
x-aliyun-apigateway-backend-name: abc
x-aliyun-apigateway-backend-location: path
responses:
'200':
description: 200 description
'400':
description: 400 description
definitions:
AiGeneratePicQueryVO:
type: object
properties:
transactionId:
type: string
description: asynchronous task ID
GeneratePictureVO:
type: object
properties:
id:
type: integer
format: int64
description: image ID
name:
type: string
description: image name
GeneratePicturesVO:
type: object
properties:
failSize:
type: integer
format: int64
description: number of failures
list:
type: array
description: image list
items:
$ref: '#/definitions/GeneratePictureVO'
title: GeneratePictureVO
successSize:
type: integer
format: int32
description: number of successes
totalSize:
type: number
format: float
description: total number of requests
ResultOfGeneratePicturesVO:
type: object
properties:
model:
description: response content
$ref: '#/definitions/GeneratePicturesVO'
title: GeneratePicturesVO
requestId:
type: string
description: request ID
Exemple Swagger : Service backend HTTP-VPC
swagger: '2.0'
basePath: /
info:
version: '0.9'
title: Aliyun Api Gateway Swagger Sample
schemes:
- http
- https
paths:
'/http/get/mapping/{userId}':
get:
operationId: case1
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: MAPPING
x-aliyun-apigateway-backend:
type: HTTP-VPC
vpcAccessName: vpcName1
path: '/builtin/echo/{userId}'
method: get
timeout: 10000
parameters:
- name: userId
in: path
required: true
type: string
- name: swaggerQuery
in: query
required: false
default: '123465'
type: integer
format: int32
minimum: 0
maximum: 100
- name: swaggerHeader
in: header
required: false
type: number
format: double
minimum: 0.1
maximum: 0.5
x-aliyun-apigateway-backend-location: query
x-aliyun-apigateway-backend-name: backendQuery
responses:
'200':
description: 200 description
'400':
description: 400 description
'/echo/test/post':
post:
operationId: testpost
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: MAPPING
x-aliyun-apigateway-backend:
type: HTTP-VPC
vpcAccessName: vpcName2
path: '/builtin/echo'
method: post
timeout: 10000
consumes:
- application/x-www-form-urlencoded
parameters:
- name: swaggerQuery1
in: query
required: false
default: '123465'
type: integer
format: int32
minimum: 0
maximum: 100
- name: swaggerQuery2
in: query
required: false
type: string
x-aliyun-apigateway-backend-location: header
x-aliyun-apigateway-backend-name: backendHeader
- name: swaggerHeader
in: header
required: false
type: number
format: double
minimum: 0.1
maximum: 0.5
x-aliyun-apigateway-backend-location: query
x-aliyun-apigateway-backend-name: backendQuery
- name: swaggerFormdata
in: formData
required: true
type: string
responses:
'200':
description: 200 description
'400':
description: 400 description
x-aliyun-apigateway-any-method:
operationId: case2
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: PASSTHROUGH
x-aliyun-apigateway-backend:
type: HTTP-VPC
vpcAccessName: vpcName3
path: '/builtin/echo'
method: post
timeout: 10000
responses:
'200':
description: 200 description
'400':
description: 400 description
Exemple Swagger : Service backend Function Compute
swagger: '2.0'
basePath: /
info:
version: '0.9'
title: Aliyun Api Gateway Swagger Sample
schemes:
- http
- https
paths:
'/http/get/mapping/{userId}':
get:
operationId: case1
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: MAPPING
x-aliyun-apigateway-backend:
type: FC
fcRegion: cn-shanghai
serviceName: fcService
functionName: fcFunction
arn: acs:ram::111111111:role/aliyunapigatewayaccessingfcrole
parameters:
- name: userId
in: path
required: true
type: string
responses:
'200':
description: 200 description
'400':
description: 400 description
Exemple Swagger : Service backend MOCK
swagger: '2.0'
basePath: /
info:
version: '0.9'
title: Aliyun Api Gateway Swagger Sample
schemes:
- http
paths:
'/mock/get/mapping/{userId}':
get:
operationId: case1
schemes:
- http
- https
x-aliyun-apigateway-parameter-handling: MAPPING
x-aliyun-apigateway-backend:
type: MOCK
mockResult: mock resul sample
mockStatusCode: 200
mockHeaders:
- name: server
value: mock
- name: proxy
value: GW
parameters:
- name: userId
in: path
required: true
type: string
responses:
'200':
description: 200 description
'400':
description: 400 description