Rest HTTP POST请求正文中的备用字段

Rest HTTP POST请求正文中的备用字段,rest,http,swagger,Rest,Http,Swagger,我一直在寻找为HTTP POST请求指定正文类型的最佳方法,该请求有两个互斥字段。 我在API规范中使用了swagger,我有一个请求必须包含字段A或字段B,但不能同时包含这两个字段 现在我将这两个字段都设置为可选,描述规范中的行为(何时设置一个字段或另一个字段),并在服务器上验证输入。如果没有填写任何字段,我将返回400个错误请求 我的问题是,这是否是正确的方法(如果我指定一个额外的内容类型,它是否会更加RESTful?),或者是否有一些东西让我能够使这种行为更加明显。我遇到了一个解决我的问题

我一直在寻找为HTTP POST请求指定正文类型的最佳方法,该请求有两个互斥字段。 我在API规范中使用了swagger,我有一个请求必须包含字段A或字段B,但不能同时包含这两个字段

现在我将这两个字段都设置为可选,描述规范中的行为(何时设置一个字段或另一个字段),并在服务器上验证输入。如果没有填写任何字段,我将返回400个错误请求


我的问题是,这是否是正确的方法(如果我指定一个额外的内容类型,它是否会更加RESTful?),或者是否有一些东西让我能够使这种行为更加明显。

我遇到了一个解决我的问题的API。 对于给定字段,该字段的类型是可扩展的(如基类和多个扩展类)。为了区分不同的子类型,有一个鉴别器字段

例如(swagger格式的YAML),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
这使得反序列化更加复杂,但这是一种非常有趣的方法,而且非常灵活