11

私が Swagger 2.0 仕様を書いている API は、基本的に任意の JSON 値のストアです。

値を読み取るパスと、事前定義されていない深さの JSON 値 (null、数値、整数、文字列、オブジェクト、配列) を格納するパスが必要です。

残念ながら、Swagger 2.0 は入力と出力のスキーマに対して非常に厳密であり、JSON スキーマで許可されているスキーマのセット全体を許可していないようです。Swagger エディターでは、たとえば、混合値 (たとえば、ブール値または整数のいずれかになるプロパティ) または大まかに定義された配列 (項目の型を厳密に定義する必要があります) およびオブジェクトは許可されません。

だから私はMixedValueスキーマを定義することで回避策を試みています:

---
swagger: '2.0'
info:
  version: 0.0.1
  title: Data store API
consumes:
- application/json
produces:
- application/json
paths:
  /attributes/{attrId}/value:
    parameters:
    - name: attrId
      in: path
      type: string
      required: true
    get:
      responses:
        '200':
          description: Successful.
          schema:
            $ref: '#/definitions/MixedValue'
    put:
      parameters:
      - name: value
        in: body
        required: true
        schema:
          $ref: '#/definitions/MixedValue'
      responses:
      responses:
        '201':
          description: Successful.
definitions:
  MixedValue:
    type: object
    properties:
      type:
        type: string
        enum:
        - 'null'
        - boolean
        - number
        - integer
        - string
        - object
        - array
      boolean:
        type: boolean
      number:
        type: number
      integer:
        type: integer
      string:
        type: string
      object:
        description: deep JSON object
        type: object
        additionalProperties: true
      array:
        description: deep JSON array
        type: array
    required:
    - type

しかし、Swagger Editor は、大まかに定義されたobjectandarrayプロパティを拒否します。

質問: - この問題を回避する方法はありますか? - それは単なる Swagger Editor のバグですか、それとも Swagger 2.0 仕様の強い制限ですか? - 必要なものを指定するためのより良い方法 (ベスト プラクティス) はありますか? - 私の API 仕様を使用する一部の言語では、swagger によって生成されるコードにいくつかの制限が予想されますか?

4

2 に答える 2

0

たぶん、これは「パターン化されたオブジェクト」を探しているものです:

フィールド パターン: ^x-

タイプ: 任意

説明: Swagger スキーマの拡張を許可します。フィールド名は、x-internal-id のように x- で始まる必要があります。値は、null、プリミティブ、配列、またはオブジェクトにすることができます。詳細については、ベンダー拡張機能を参照してください。

ソース: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md

于 2015-10-01T07:00:14.653 に答える