2016-01-26 68 views
31

我的REST Web服务中有一个使用GET方法的函数,它有两个可选参数。如何使用Swagger在路径中定义可选参数

我试图扬鞭来定义它,但我遇到了一个错误,不是有效的参数定义,我设置了requiredfalse后。

我发现,如果我将required的值设置为true,错误将会消失。这是我的Swagger代码的示例。

... 
paths: 
    '/get/{param1}/{param2}': 
    get: 
     ... 
     parameters: 
     - name: param1 
     in: path 
     description: 'description regarding param1' 
     required: false 
     type: string 
     - name: param2 
     in: path 
     description: 'description regarding param2' 
     required: false 
     type: string 

我没有经历过身体的参数或查询中的参数。我认为这个问题只与路径中的参数有关。我在swagger规范文件中找不到任何解决方案。

是否有任何其他方式来定义Swagger中的可选参数还是我的代码中有任何错误?

任何帮助,将不胜感激。

回答

28

鉴于路径参数必须根据的OpenAPI /扬鞭规范要求,可以考虑增加2个独立的端点与以下路径:

  • /得/ {参数1}/{参数2}(当参数2提供)
  • /得/ {参数1} /(未提供参数2时)
+1

请参阅https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#fixed-fields-7 –

+0

@Hedeshy如果这是正确答案,请标记为正确。谢谢。 –

+0

我实际上正在等待更好的回答,因为这样你就需要重复一切。不过,看起来这是目前唯一的选择。 – Hedeshy

17

它可能炸毁,因为你不能有一个基本的uri参数可选,只有查询字符串值(在url的情况下)。

例如:

  • GET /产品/ {ID} /定价富=酒吧
  • **如果FOO是可选的,然后你的IN参数必须是 “查询” 而不是 “路径”
  • **如果{id}是可选的,则说明有问题。 {id}不能是可选的,因为它包含在基本uri中。

这应该工作:

{ 
"in":"query", 
"required":false 
} 

这不应该工作

{ 
"in":"path", 
"required":false 
} 

变化 “在” 属性你是不是 “查询”, “路径”,它应该工作。

+0

谢谢@Jerrod的回答,但恐怕它不会解决问题。客户想要路径中的参数,因为无法以适当的方式创建文档,所以我不能将它们放在查询中。 – Hedeshy

+1

不幸的是我不认为你将能够在“路径”中有一个可选参数。它不是一个Swagger的东西,而是URL架构的工作原理。如果您有GET/products/{id},并且您认为{id}是可选的,那么您已完全更改资源所针对的网址(即现在的GET/products)。也许你可以把它带回给他们,问他们为什么他们想要一个可选的参数在基础uri中。我使用REST API很多,这听起来像一个情况,可能需要更多地考虑请求/资源来解决问题。祝你好运! –

+0

如果我有以下端点,查询是否有效: /resource?querystring和/ resource/{id}?可以将{id}与查询参数区分开来吗? – Gobliins

3

你YAML失败,因为它的规格说明:

确定此参数是否必需。如果参数在“路径”中,则此属性是必需的,其值必须为真。

来源:http://swagger.io/specification/#parameterObject(看看固定字段表)

相关问题