【おーぷんえーぴーあい】

OpenAPI とは?

💡 APIの設計図を標準フォーマットで書くための「共通の仕様書ルール」
📌 このページのポイント
OpenAPI — API仕様定義の構造 openapi.yaml API仕様定義ファイル paths エンドポイント定義 schemas データ構造定義 security 認証方式定義 info メタ情報 ▼ 自動生成 APIドキュメント Swagger UI等 クライアントSDK 各言語のコード生成 モックサーバー テスト用スタブ
OpenAPIによるAPI仕様定義と自動生成のイメージ
ひよこ ひよこ

SwaggerとOpenAPIって同じもの?

ペンギン先生 ペンギン先生

混同されやすいけど、厳密には別物だよ。OpenAPIはAPI仕様の標準フォーマット(仕様)で、Swaggerはその仕様を扱うためのツール群(エディタ・UI・コードジェネレーターなど)のことなんだ。もともとSwagger仕様と呼ばれていたものがOpenAPI仕様に改名されたという歴史があるよ。

ひよこ ひよこ

OpenAPI仕様書って何を書くの?

ペンギン先生 ペンギン先生

エンドポイントのパス・HTTPメソッド・パラメータの型・リクエスト・レスポンスのスキーマ・認証方式・エラーのパターンなどを書くんだ。「GETで `/users/{id}` を叩いたらUser型のJSONが返る」みたいな情報を機械が読める形式で記述するよ。

ひよこ ひよこ

コード自動生成って実際に使えるの?

ペンギン先生 ペンギン先生

openapi-generatorというツールを使うと、OpenAPI仕様書からTypeScriptPython・Go・Javaなどのクライアントコードを自動生成できるよ。APIを変更するたびに仕様書を更新して再生成することで、クライアントとサーバーの型の齟齬を防げるんだ。

ひよこ ひよこ

コードからOpenAPIを自動生成する方法もあるの?

ペンギン先生 ペンギン先生

そっちの方向もあって、「コードファースト」と呼ぶよ。FastAPIやNestJSなどのフレームワークはコードを書くとOpenAPI仕様書を自動で生成してくれる。一方「仕様ファースト」はOpenAPIを先に書いてからコードを実装する方法で、チームでAPIの設計を先に合意したいときに向いている。どちらが正解かはチームの流儀によるんだけど、仕様書とコードが乖離しないように管理するのが一番大変だよ。

ひよこ ひよこ

OpenAPIの代わりになるものってある?

ペンギン先生 ペンギン先生

GraphQLを使う場合はGraphQLスキーマ自体がAPI仕様書になるからOpenAPIは不要。gRPCならProtocol Buffers(.protoファイル)が仕様書REST API以外の選択肢が増えているけど、REST APIを使うならOpenAPIはデファクトスタンダードだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「OpenAPI」って出てきたら「REST APIの構造を標準形式で記述するための仕様書フォーマットだな」と思えばだいたいOK!
📖 おまけ:英語の意味
「OpenAPI(OpenAPI Specification)」 = 公開APIの仕様
💬 もとはSmartBearのSwaggerプロジェクトとして始まり、Linux Foundation傘下のOpenAPI Initiativeが管理する標準として発展したよ
← 用語集にもどる