2017-04-05 48 views
2

我通过Open API规范指定了我的AWS API网关API。规范包含了许多我希望客户端开发人员在与API集成时使用的文档。但是,似乎我们添加到Open API规范的文档不会从API网关导出,因此不能用于消费。Open API中指定的文档不会从AWS API网关导出

如前所述,我从JSON中的Open API规范开始。 我使用CloudFormation AWS::ApiGateway::RestApi资源将其导入API网关。

这之后我的API部署到一个阶段,最后,使用此API +阶段导出文件的AWS CLI:

aws apigateway get-export \ 
    --parameters extensions='documentation' \ 
    --rest-api-id abc123 \ 
    --stage-name api \ 
    --export-type swagger \ 
    ./docs.json 

这种出口似乎缺少了很多重要的文件属性,例如中如descriptionpattern

在我的API的例子Open API的参数:

{ 
    in: 'path', 
    name: 'service', 
    type: 'string', 
    required: true, 
    pattern: '^[-a-zA-Z0-9]+$', 
    description: 'Name of the Service (document) to retrieve.' 
} 

当我出口这与AWS-控制台的命令,我得到:

{ 
    "name" : "service", 
    "in" : "path", 
    "required" : true, 
    "type" : "string" 
} 

descriptionpattern性都被剥夺从文档导出这是不好的,因为他们真的是这个参数的文档的主要部分。

另外值得一提的是,如果我在AWS控制台(Swagger + API网关扩展)中导出相同的API,那么我将获得与从文档导出时相同的参数定义。

也可能值得一提的是,如果这样做有所不同,那么这些集成都基于Lambda代理。

回答

3

一旦导入Swagger模板,API网关将API定义及其文档分成两个独立的实体。这使您可以独立修改和部署两者。

导出功能只导出部署到舞台的任何内容。导入Swagger模板将导致API定义和文档部分被导入。但是,它看起来像您只部署了API定义。您必须在文档变得可用于出口之前明确发布文档。

enter image description here

就像你指出,你也可以使用CLI发布文档的新版本:

aws apigateway create-documentation-version \ --rest-api-id abc123 \ --documentation-version 1 \ --stage-name api

0

从API网关团队获得了一些帮助,这已得到解决。

看起来我的工作流程中缺少一个步骤。 部署API后,文件必须部署:

aws apigateway create-documentation-version \ 
    --rest-api-id abc123 \ 
    --documentation-version 1 \ 
    --stage-name api 

这样做了以后,因为它出现以前一样export命令将产生的文档,而不是API定义。