データ型
スキーマのデータ型は type キーワードによって定義されます(例:type: string)。OpenAPI は以下の基本型を定義しています
これらの型は、名前は異なる場合がありますが、ほとんどのプログラミング言語に存在します。これらの型を使用することで、あらゆるデータ構造を記述できます。
なお、null 型は存在しません。代わりに、ベース型の修飾子として nullable 属性が使用されます。
追加の type 固有のキーワードを使用して、データ型をさらに詳細化できます(例:文字列の長さを制限したり、可能な値のenumを指定したりする)。
混合型
type は単一の値を取ります。type をリストとして指定することは OpenAPI では無効です(JSON Schema では有効ですが)。
1# Incorrect2type:3 - string4 - integer混合型は、代替型のリストを指定する oneOf および anyOf を使用して記述できます。
1# Correct2oneOf:3 - type: string4 - type: integer任意の型も参照してください。
数値
OpenAPI には number と integer の 2 つの数値型があります。number には整数と浮動小数点数の両方が含まれます。オプションの format キーワードは、ツールが特定の数値型を使用するためのヒントとして機能します。
タイプ |
フォーマット |
説明 |
|---|---|---|
| 数 | – | 任意の数値。 |
| 数 | 浮動小数点数 | 浮動小数点数。 |
| 数 | ダブル | 倍精度浮動小数点数。 |
| 整数 | – | 整数。 |
| 整数 | int32 | 符号付き32ビット整数(一般的に使用される整数型)。 |
| 整数 | int64 | 符号付き64ビット整数(`long`型)。 |
「17」のような数値を含む文字列は、文字列として扱われ、数値とはみなされません。
最小値と最大値
minimum および maximum キーワードを使用して、可能な値の範囲を指定します。
1type: integer2minimum: 13maximum: 20デフォルトでは、minimum および maximum の値は範囲に含まれます。つまり、
1minimum ≤ value ≤ maximum境界値を除外するには、exclusiveMinimum: true および exclusiveMaximum: true を指定します。例えば、浮動小数点数の範囲を 0~50 と定義し、0 の値を除外することができます。
1type: number2minimum: 03exclusiveMinimum: true4maximum: 50exclusiveMinimum および exclusiveMaximum の「exclusive」という単語は、対応する境界が *除外される* ことを意味します。
| キーワード | 説明 |
|---|---|
exclusiveMinimum: false または含まれない場合 |
値 ≥ minimum |
exclusiveMinimum: true |
値 > minimum |
exclusiveMaximum: false または含まれない場合 |
値 ≤ maximum |
exclusiveMaximum: true |
値 < maximum |
倍数
multipleOf キーワードを使用して、数値が別の数値の倍数でなければならないことを指定します。
1type: integer2multipleOf: 10上記の例は、10、20、30、0、-10、-20 などに一致します。multipleOf は浮動小数点数でも使用できますが、実際には浮動小数点演算の精度の制限により信頼性が低い場合があります。
1type: number2multipleOf: 2.5multipleOf の値は正の数値でなければなりません。つまり、multipleOf: -5 は使用できません。
文字列
文字列は次のように定義されます。
1type: string文字列の長さは minLength および maxLength を使用して制限できます。
1type: string2minLength: 33maxLength: 20minLength または pattern が指定されていない限り、空の文字列 "" は有効な文字列であることに注意してください。
文字列のフォーマット
オプションの format 修飾子は、文字列の内容とフォーマットに関するヒントとして機能します。OpenAPI は以下の組み込み文字列フォーマットを定義しています。
date– RFC 3339, セクション 5.6 で定義されている完全日付表記。例: _2017-07-21_date-time– RFC 3339, セクション 5.6 で定義されている日時表記。例: _2017-07-21T17:32:28Z_password– UI に入力をマスクするようヒントを与える。byte– Base64 エンコードされた文字。例: _U3dhZ2dlciByb2Nrcw==_binary– バイナリデータ。ファイルを表すために使用されます(以下のファイルを参照)。
ただし、format はオープンな値なので、OpenAPI Specification で定義されていない形式であっても、次のような任意の形式を使用できます。
メールuuiduriホスト名ipv4ipv6- その他
ツールは format を使用して入力を検証したり、選択したプログラミング言語の特定の型に値をマッピングしたりできます。特定のフォーマットをサポートしていないツールは、format が指定されていない場合と同様に、デフォルトで type のみを使用する場合があります。
パターン
pattern キーワードを使用すると、文字列値の正規表現テンプレートを定義できます。このテンプレートに一致する値のみが受け入れられます。使用される正規表現構文は JavaScript(より具体的には ECMA 262)のものです。正規表現は大文字と小文字を区別します。つまり、[a-z] と [A-Z] は異なる表現です。例えば、以下のパターンは 123-45-6789 形式の社会保障番号(SSN)に一致します。
1ssn:2 type: string3 pattern: '^\d{3}-\d{2}-\d{4}$'正規表現は ^…$ トークンで囲まれていることに注意してください。^ は文字列の先頭を意味し、$ は文字列の末尾を意味します。^…$ がないと、pattern は部分一致として機能します。つまり、指定された正規表現を *含む* 任意の文字列に一致します。例えば、pattern: pet は *pet*、*petstore*、*carpet* に一致します。^…$ トークンは厳密な一致を強制します。
ブーリアン
type: boolean は true と false の 2 つの値を表します。真値や偽値(例:「true」、「」、0、null)はブール値とはみなされないことに注意してください。
Null
OpenAPI 3.0 には JSON Schema のような明示的な null 型はありませんが、nullable: true を使用して値が null である可能性があることを指定できます。null は空の文字列 "" とは異なることに注意してください。
1# Correct2type: integer3nullable: true4
5# Incorrect6type: null7
8# Incorrect as well9type:10 - integer11 - null上記の例は、C# の nullable 型 int? や Java の java.lang.Integer にマップされる場合があります。オブジェクトでは、nullable なプロパティは optional なプロパティとは異なりますが、一部のツールでは optional なプロパティを null 値にマップすることを選択する場合があります。
配列
配列は次のように定義されます。
1type: array2items:3 type: stringJSON Schema とは異なり、配列では items キーワードが必須です。items の値は、配列項目の型と形式を記述するスキーマです。配列はネストできます。
1# [ [1, 2], [3, 4] ]2type: array3items:4 type: array5 items:6 type: integerそしてオブジェクトを含めることができます。
1# [ {"id": 5}, {"id": 8} ]2type: array3items:4 type: object5 properties:6 id:7 type: integer項目スキーマはインラインで(前の例のように)指定することも、$ref を介して参照することもできます。
1# Array of Pets2type: array3items:4 $ref: "#/components/schemas/Pet"混合型配列
混合型配列は oneOf を使用して定義できます。
1# ["foo", 5, -2, "bar"]2type: array3items:4 oneOf:5 - type: string6 - type: integeroneOf はインラインのサブスキーマ(上記の例のように)と参照の両方を許可します。
1# Array of Cats and Dogs2type: array3items:4 oneOf:5 - $ref: "#/components/schemas/Cat"6 - $ref: "#/components/schemas/Dog"任意の型の配列は次のように定義できます。
1type: array2items: {}1# [ "hello", -2, true, [5.7], {"id": 5} ]ここで、{} は「任意の型」スキーマです(以下を参照)。items の次の構文は無効であることに注意してください。
1# Incorrect2items:3 - type: string4 - type: integer5
6# Incorrect as well7items:8 type:9 - string10 - integer配列の長さ
配列の最小長と最大長は次のように定義できます。
1type: array2items:3 type: integer4minItems: 15maxItems: 10minItems がなければ、空の配列は有効とみなされます。
uniqueItems
uniqueItems: true を使用して、配列内のすべての項目が一意でなければならないことを指定できます。
1type: array2items:3 type: integer4uniqueItems: true5# [1, 2, 3] – valid6# [1, 1, 3] – not valid7# [ ] – validオブジェクト
オブジェクトはプロパティと値のペアのコレクションです。properties キーワードはオブジェクトのプロパティを定義するために使用されます。プロパティ名をリストし、各プロパティのスキーマを指定する必要があります。
1type: object2properties:3 id:4 type: integer5 name:6 type: stringヒント: OpenAPI では、オブジェクトは通常、リクエストおよびレスポンスの定義にインラインで定義するのではなく、グローバルな components/schemas セクションで定義されます。
必須プロパティ
デフォルトでは、すべてのオブジェクトプロパティはオプションです。required リストで必須プロパティを指定できます。
1type: object2properties:3 id:4 type: integer5 username:6 type: string7 name:8 type: string9required:10 - id11 - usernamerequired はオブジェクトレベルの属性であり、プロパティ属性ではないことに注意してください。
1type: object2properties:3 id:4 type: integer5 required: true # Wrong!6
7required: # Correct8 - id空のリスト required: [] は無効です。すべてのプロパティがオプションである場合、required キーワードは指定しないでください。
読み取り専用および書き込み専用プロパティ
readOnly および writeOnly キーワードを使用して、特定のプロパティを読み取り専用または書き込み専用としてマークできます。これは、例えば、GET が POST で使用されるよりも多くのプロパティを返す場合に便利です。GET と POST の両方で同じスキーマを使用し、余分なプロパティを readOnly としてマークすることができます。readOnly プロパティはレスポンスに含まれますがリクエストには含まれず、writeOnly プロパティはリクエストで送信できますがレスポンスには含まれません。
1type: object2properties:3 id:4 # Returned by GET, not used in POST/PUT/PATCH5 type: integer6 readOnly: true7 username:8 type: string9 password:10 # Used in POST/PUT/PATCH, not returned by GET11 type: string12 writeOnly: truereadOnly または writeOnly プロパティが required リストに含まれている場合、required は関連するスコープ(レスポンスのみ、またはリクエストのみ)にのみ影響します。つまり、読み取り専用の必須プロパティはレスポンスにのみ適用され、書き込み専用の必須プロパティはリクエストにのみ適用されます。
ネストされたオブジェクト
オブジェクトにはネストされたオブジェクトを含めることができます。
1components:2 schemas:3 User:4 type: object5 properties:6 id:7 type: integer8 name:9 type: string10 contact_info:11 # The value of this property is an object12 type: object13 properties:14 email:15 type: string16 format: email17 phone:18 type: stringネストされたオブジェクトを複数のスキーマに分割し、$ref を使用してネストされたスキーマを参照することができます。
1components:2 schemas:3 User:4 type: object5 properties:6 id:7 type: integer8 name:9 type: string10 contact_info:11 $ref: "#/components/schemas/ContactInfo"12
13 ContactInfo:14 type: object15 properties:16 email:17 type: string18 format: email19 phone:20 type: string自由形式のオブジェクト
自由形式のオブジェクト(任意のプロパティ/値ペア)は次のように定義されます。
1type: objectこれは以下と同等です。
1type: object2additionalProperties: trueそして
1type: object2additionalProperties: {}プロパティの数
minProperties および maxProperties キーワードを使用すると、オブジェクトに許可されるプロパティの数を制限できます。これは additionalProperties や自由形式のオブジェクトを使用する場合に役立ちます。
1type: object2minProperties: 23maxProperties: 10この例では、{"id": 5, "username": "trillian"} はスキーマに一致しますが、{"id": 5} は一致しません。
ファイル
OpenAPI 2.0 とは異なり、Open API 3.0 には file 型はありません。ファイルは文字列として定義されます。
1type: string2format: binary # binary file contentsまたは
1type: string2format: byte # base64-encoded file contentsこれは、希望するファイル転送方法によって異なります。詳細については、「ファイルのアップロード」、「multipart リクエスト」、および「ファイルを返すレスポンス」を参照してください。
任意の型
型のないスキーマは、数値、文字列、オブジェクトなど、あらゆるデータ型に一致します。{} は任意の型スキーマの短縮構文です。
1components:2 schemas:3 AnyValue: {}説明を提供したい場合
1components:2 schemas:3 AnyValue:4 description: Can be any value - string, number, boolean, array or object.上記は以下と同等です。
1components:2 schemas:3 AnyValue:4 anyOf:5 - type: string6 - type: number7 - type: integer8 - type: boolean9 - type: array10 items: {}11 - type: objectnull 値を許可する必要がある場合は、nullable: true を追加します。
1components:2 schemas:3 AnyValue:4 nullable: true5 description: Can be any value, including `null`.お探しのものが見つかりませんでしたか? コミュニティに質問する
間違いを見つけましたか? お知らせください