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