2016-01-26 113 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(看看固定字段表)

相關問題