2017-04-05 47 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定義。