首页 文章

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

提问于
浏览
2

我一直在寻找为HTTP POST请求指定主体类型的最佳方法,该请求具有两个互斥的字段 . 我正在使用swagger作为API规范,我有一个请求必须有field_A或field_B,但不能同时具有 .

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

我的问题是这是否是正确的方法(如果我指定一个额外的内容类型会更加RESTful吗?),或者如果Swagger中有某些东西允许我使这种行为更加明显 .

1 回答

  • 0

    我遇到了一个解决了我的问题的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
    

    这使得反序列化变得更加复杂,但这是一种非常有趣的方法并且非常灵活 .

相关问题