2016-03-08 77 views
2

我一直在尋找爲具有兩個互斥的字段的HTTP POST請求指定主體類型的最佳方式。 我正在使用swagger作爲API規範,並且我有一個請求必須具有field_A或field_B,但不是兩者都有。HTTP POST請求主體中的備用字段

現在我將這兩個字段設置爲可選,描述規範中的行爲(何時設置一個字段或另一個字段)以及驗證服務器上的輸入。如果沒有填充字段,我將返回一個400錯誤請求。

我的問題是這是否是正確的方法(如果我指定了額外的內容類型,它會更加RESTful嗎?),或者Swagger中有什麼東西可以讓這種行爲更明顯。

回答

0

我遇到了解決我的問題的API。 對於給定的字段,該字段的類型是可擴展的(如基類和多個擴展類)。爲了區分不同的子類型,有一個鑑別器字段。例如(YAGL在Swagger格式中),類型Foo是可擴展的並且具有子類型FooA和FooB。鑑別器是一個類型字段:

definitions: 
    Foo: 
    type: object 
    properties: 
     type: string 
     x-extensible-enum: 
     - FOO_A 
     - FOO_B 
     discriminator: type 
     required: 
     - type 
    FOO_A: 
    allOf: 
     - $ref: '#/definitions/Foo' 
     - type: object 
     properties: 
      field_a: 
      type: string 
     required: 
      - field_a 
    FOO_B: 
    allOf: 
     - $ref: '#/definitions/Foo' 
     - type: object 
     properties: 
      field_b: 
      type: integer 
      format: int32 
     required: 
      - field_b 

這使得反序列化更加複雜,但這是一個非常有趣的方法,非常靈活。