本文へ移動

OpenAPI の対応状況 ​

このページでは、oasis-gen が OpenAPI ドキュメントから何を受け付け、それぞれの機能をどのように扱うかを一覧にしています。対応状況を表す語の意味は次のとおりです。

  • 対応:生成されるクライアントに影響する機能
  • 無視:受け付けるが、生成されるクライアントには影響しない機能
  • 拒否:エラーとなり、クライアントの生成が中止される機能
  • 未対応:「備考」欄の記載どおりに解釈されるか、まったく処理されない機能

バージョン ​

バージョン対応状況
OpenAPI 3.2対応
OpenAPI 3.1対応(3.2 とまったく同じように解釈)
OpenAPI 3.0対応(下記の違いあり)
Swagger 2.0(swagger: "2.0")未対応

OpenAPI 3.0 のドキュメントでは、以下のキーワードを次のように扱います。

キーワード扱い
nullable: true型に null を追加。enum に指定されている場合は、列挙値に null がなくても null を追加(ほかの生成ツールも同様に解釈するが、3.0.3 自体の規定ではこのような enum に null は認められない)
$ref と並んだ nullable: true、または $ref を 1 つだけ含む allOf に指定された nullable: true参照先の型に null を追加
$ref と並んだそのほかのキーワード3.0 の仕様では無視するとされているが、3.1 以降と同じく適用。{ $ref: Base, properties: {...} } は Base & {...} になる
type: string, format: binary生のバイナリーデータ。type のないスキーマとして解釈され、unknown 型(マルチパートの本体と text/* のレスポンスでは Blob 型)に変換
type: string, format: byteBase64 のテキスト。contentEncoding: base64 として解釈され、string 型に変換。マルチパートのパートとしては application/octet-stream で送信
example、論理値の exclusiveMinimum無視

3.1 または 3.2 のドキュメントでは、仕様上 nullable が警告なく無視されるため、nullable の使用は拒否されます。代わりに type: [..., "null"] を使用してください。

ドキュメント ​

機能対応状況備考
JSON と YAML対応ファイルから、または - の指定により標準入力から読み込み
ほかのローカルファイルへの $ref対応ドキュメント全体またはフラグメント。参照元のドキュメントからの相対パスで解決
$self、スキーマ内の $id と $anchor対応https://api.example.com/openapi/root.yaml のような $self の URI をそのファイル自身のディレクトリーに対応付けるため、同じ階層にある schemas/pet.yaml をローカルファイルとして検出
components.mediaTypes とそれへの $ref対応
ASCII の英数字、.、-、_ 以外の文字を含むコンポーネント名拒否仕様で ^[a-zA-Z0-9\.\-_]+$ に限定されている
リモートの $ref、入力としての URL未対応ローカルファイルに対応付けられない https://... の URI

ほかのファイルのスキーマに対しても個別の型エイリアスが生成されますが、エクスポートされて components に含まれるのはコンポーネントのスキーマだけです(スキーマを参照)。

生成には、信頼できるドキュメントだけを使用してください。oasis-gen は、$ref が指すローカルファイルを場所を問わず読み込みます。

スキーマ ​

各キーワードがどの TypeScript の型に変換されるかについては、スキーマをご覧ください。

機能対応状況備考
JSON Schema 2020-12対応type の配列、const、enum、allOf、oneOf、anyOf、prefixItems、minItems、additionalProperties、patternProperties、propertyNames(名前の列挙として)、ほかのキーワードと並んだ $ref、readOnly と writeOnly(厳密な型を参照)
再帰的なスキーマ対応プロパティ、配列、additionalProperties を経由する再帰。$defs など components.schemas 以外の場所への $ref も含む
oneOf または anyOf の discriminator対応明示的なマッピングと暗黙的なマッピング、defaultMapping
親スキーマの oneOf に列挙され、それぞれが allOf で親を拡張するサブタイプ対応サブタイプを参照
$ref、allOf、oneOf、anyOf のみを経由するその他の循環参照拒否間にオブジェクトも配列も挟まない循環参照
allOf の親スキーマに指定された discriminator未対応親スキーマは子スキーマのユニオン型には変換されない
$dynamicRef未対応unknown として型付け

操作 ​

機能対応状況備考
get、put、post、delete、options、head、patch、trace対応
query(HTTP の QUERY メソッド)対応
additionalOperations対応LINK などのカスタムメソッド
一部の additionalOperations の名前拒否大文字・小文字を問わない delete、get、head、options、post、put と、大文字の PATCH、TRACE、QUERY(fetch がこれらを固定フィールドと同じメソッドとして送信するため)。また、クライアント側で予約されている with と then
コールバックと Webhook未対応

パラメーター ​

場所スタイル備考
queryform、deepObjectallowReserved に対応。spaceDelimited と pipeDelimited は拒否
pathsimplelabel と matrix は拒否
headersimple
cookieform(パーセントエンコード)、cookie(そのまま送信)仕様上クッキーには & を使用できないため、explode で展開された値はどちらのスタイルでも ; で連結
querystring対応メディアタイプに基づいて型付けとエンコードを実施。querystring パラメーターを参照

すべてのスタイルが explode に対応しています。また、スキーマの代わりに content を持つパラメーターにも対応しています。メディアタイプが JSON のクエリーパラメーターは、スキーマに基づいて型付けされ、JSON としてシリアライズされます。一方、content を持つその他のパラメーターには、シリアライズ済みの文字列を渡します。

クッキーパラメーターとクッキーの API キーは Cookie ヘッダーとして送信されますが、ブラウザーの fetch ではこのヘッダーが無視されます。Node.js と Bun では動作します。

リクエスト本体とレスポンス本体 ​

各メディアタイプの型付けとデコードの方法については、リクエスト本体とレスポンス本体をご覧ください。

機能対応状況備考
逐次的なメディアタイプ(sequential media types)と itemSchema対応JSON Lines、NDJSON、JSON テキストシーケンス、サーバー送信イベント。非同期反復可能オブジェクトとしてストリーミング
multipart/form-data のリクエスト本体対応スキーマに基づいて型付けし、FormData として送信。フォームの本体を参照
その他の multipart のリクエスト本体(multipart/mixed など)未対応利用者が組み立てた Blob として渡す(type にメディアタイプと boundary パラメーターを指定)
Encoding Object(encoding)対応contentType、style、explode、allowReserved に対応。FormData ではパートのヘッダーや入れ子のパートを送信できないため、省略可能な headers は除外され、必須のヘッダーや multipart のパートは拒否
prefixEncoding、itemEncoding未対応その他の multipart メディアタイプにのみ適用される機能
型付きのレスポンスヘッダー未対応

サーバーとセキュリティ ​

機能対応状況備考
最上位、パスアイテム、操作の servers対応変数には既定値を設定。サーバーと baseUrlを参照
セキュリティスキーム対応apiKey、http、oauth2、openIdConnect、mutualTLS。auth を通じて利用
OAuth2 のフロー未対応トークンは利用者自身で取得