2015-07-20 381 views
2

可以在多種類型的Swagger中定義輸入參數嗎?Swagger參數多態性

例如: 我有一個使用URL http://localhost/tasks/{taskId}來接收資源的API。但是每個任務都包含整數ID和字符串uuid。我想允許用戶通過id或uuid來尋址資源 - 因此,http://localhost/tasks/123http://localhost/tasks/51f12dbc-02e7-41a6-ab81-2381caea0176這兩個URL都是有效的。

但是,對於在招搖文檔(https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#parameter-object)參數對象只能有單一類型

類型:必需。參數的類型。由於該參數不在請求主體處,因此僅限於簡單類型(即不是對象)。該值必須是「字符串」,「數字」,「整數」,「布爾」,「數組」或「文件」之一。

那麼如何將輸入路徑參數描述爲字符串/整數?

回答

3

無法在Swagger規範中定義屬於多個類型的參數。

在你的情況,我認爲你可以使用字符串,它可以表示字符串(例如「51f12dbc-02e7-41a6-ab81-2381caea0176」)和整數(例如「123」)在路徑參數和服務器應該正確接收數據。

1

這是在3.0的OpenAPI可能使用oneOf

openapi: 3.0.0 
... 
paths: 
    /tasks/{taskId}: 
    parameters: 
     - in: path 
     name: taskId 
     required: true 
     schema: 
      oneOf: 
      - type: integer 
       example: 123 
      - type: string 
       format: uuid 
       example: 51f12dbc-02e7-41a6-ab81-2381caea0176