Apidog

オールインワン協働API開発プラットフォーム

API設計

APIドキュメント

APIデバッグ

APIモック

API自動テスト

解説:Swagger(OpenAPI)の 仕様書の書き方

SwaggerやOpenAPIは、API業界標準の仕様になります。API設計を標準化にしたりする必要がある場合、SwaggerやOpenAPI仕様書の書き方をマスタする必要があるのでしょう。本文では、SwaggerとOpenAPIの仕様書の書き方を皆さんに詳しく解説するので、必要な方は本文の内容を参照してください。

中村 拓也

中村 拓也

Updated on 11月 12, 2024

SwaggerやOpenAPIは、API業界標準の仕様になります。API設計を標準化にしたりする必要がある場合、SwaggerやOpenAPI仕様書の書き方をマスタする必要があるのでしょう。本文では、SwaggerとOpenAPIの仕様書の書き方を皆さんに詳しく解説するので、必要な方は本文の内容を参照してください。

また、SwaggerやOpenAPIの仕様にも完璧に互換なApidogを使って、非常に綺麗なAPI仕様書を自動生成する方法を皆さんに紹介します。

button

SwaggerとOpenAPIとは

SwaggerとOpenAPIはAPIの定義とドキュメント化のためのフレームワークです。

Swaggerは最初にSmartBear Softwareによって作成されたOSSのフレームワークで、APIの定義やインタラクティブなドキュメントを自動生成できます。OpenAPIはSwagger 2.0仕様をベースにした業界標準の仕様です。

最近のバージョンとしてはOpenAPI 3.0があり、JSON/YAMLファイルでAPIを定義できるほか、豊富な機能が追加されています。多くの場合このOpenAPI 3.0仕様に準拠したSwaggerツールを利用するのが一般的です。

Swagger(OpenAPI)の 仕様書の書き方

Swagger(OpenAPI)の 仕様書の書き方といえば、YAMLとJSONといった形式を避けることができないのでしょう。OpenAPIの仕様書は主にYAMLやJSON形式で記述します。

YAML形式

  • YAMLはインデントによる階層構造を表現できる形式
  • 視認性が高く、構造的に記述しやすい
  • インデント、スペース、大文字小文字に注意
  • OpenAPIのRoot要素から順に、情報、サーバー、パス、コンポーネントを記述

JSON形式

  • JSONは{}や[]による階層構造
  • YAMLよりも若干冗長だが、プログラミング言語との親和性が高い
  • 構造的にはYAMLと同じ順序で記述
  • オブジェクトは{}、配列は[]で表現
  • キーとバリューのペアで要素を定義

このように、YAMLとJSONそれぞれに特徴があります。

YAMLの方が直感的で視認性が高い反面、JSONはプログラマにとってなじみやすい構造です。目的と開発スタイルに合わせて、適切な形式を選択していくことが重要です。どちらもOpenAPIの標準仕様に従えばAPI定義が可能です。次は、この2つの形式を利用して、OpenAPIの仕様書を書く方法を別々に紹介していきたいと思います。

YAMLでOpenAPI仕様書を書く

YAMLとは、YAML Ain't Markup Languagの略語として再帰的頭字語を意味して、データをシリアライズするためのテキストベースのマークアップ言語です。OpenAPI仕様の標準形式の1つとして、APIを記述してAPI仕様書・設計書を作成する際、yaml形式が非常に汎用されています。

YAMLフォーマット

yamlでAPI仕様書・設計書を記述する際、OpenAPI(Swagger)仕様に準拠する必要があります。そして、エンドポイント、パラメータ、リクエストボディやレスポンスなどの情報を記述する必要があります。

例えば、ユーザー情報を取得するシンプルなAPIの仕様書は以下のようにYAMLで記述できます。

openapi: 3.0.0
info:
  title: User API
  version: 1.0.0
servers:
  - url: https://example.com/api/v1

paths:
  /users/{userId}:
    get:
      summary: Get a user
      parameters:
        - in: path
          name: userId
          required: true
          description: User identifier
          schema:
            type: integer
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
              
components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        email:
          type: string
  • 最上位にopenapiバージョン、APIのタイトル、バージョン等の基本情報を定義
  • serversでエンドポイントのURLを指定
  • pathsでエンドポイントごとのパスとメソッドを定義
  • parametersにパスパラメーター、responsesにレスポンスを記述
  • componentsでデータ構造を参照

このように、YAMLの特徴を活かしたインデント構造と、OpenAPI標準の仕様でAPI定義を作成することができます。ただし、yaml形式の仕様書は、上記のコードのままになりますが、この仕様書をより直感的に表示させるには、yamlファイルをApidogにインポートして、yamlのAPI仕様書を可視化にすることができます。

JSONでOpenAPI仕様書を書く

JSONはJavaScript Object Notationの略で、データを記述するための軽量なデータ交換フォーマットです。OpenAPIではYAMLと並ぶ主要な定義ファイルのフォーマットとしてJSONがサポートされています。

JSON

JSONで記述した場合は、基本的な構造はYAMLと同じですが、表記法が異なります。

例えば、上記のユーザー情報取得APIは、JSONで以下のように記述できます。

{
  "openapi": "3.0.0",
  "info": {
    "title": "User API",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://example.com/api/v1"
    }
  ],

  "paths": {
    "/users/{userId}": {
      "get": {
        "summary": "Get a user",
        "parameters": [
          {
            "in": "path",
            "name": "userId",
            "required": true,
            "description": "User identifier",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          }
        }
      }
    }
  },

  "components": {
    "schemas": {
      "User": {
        "type": "object", 
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          }
        }
      }
    }
  }
}
  • 最上位のopenapiキーではバージョンが3.0.0と定義されています。
  • infoオブジェクトでは、APIのタイトルとバージョンが記述されています。
  • servers配列では、APIのエンドポイントURLが定義されています。
  • pathsオブジェクト内で、/users/{userId}のパスに対してget操作が定義されています。
  • getオブジェクト内では、summary、parameters、responsesが定義されています。
  • parameters配列では、パスパラメータuserIdが定義されています。
  • responsesオブジェクトでは、200レスポンスが定義され、Userスキーマが参照されています。
  • componentsオブジェクト内で、Userスキーマが定義されており、id、name、emailのプロパティがあるobjectとなっています。

このように、OpenAPIの仕様構造に沿ってAPIのエンドポイント、操作、パラメータ、レスポンス、データ構造がJSON形式で定義されています。

JSONやYAMLにも対応:Apidogは綺麗な仕様書を生成

API管理が必要となる場合は、一番使いやすいAPI管理ツールのApidogを使用すると、JSONやyaml形式のAPIを簡単にインポートして、直感的な仕様書を生成したり、APIをテストしたりすることができます。

button

JSONやYAMLを簡単にインポート

ApidogはJSONYAMLフォーマットのOpenAPI 3Swagger 1、2、3のAPIをインポートすることをサポートしているので、YAMLやJSONフォーマットのAPIを完全に解析して、APIのデータを完全にApidogにインポートしてテストできます。

ステップ⒈プロジェクトの設定を開き、「データをインポート」をクリックすると、「OpenAPI/Swagger」を選択して、YAMLファイルをApidogにドラッグします。

YAMLをApidogにインポート

ステップ⒉ここでYAMLファイルが解析され、データの保存先を選択すると、「確認」ボタンをクリックするだけで、それを簡単にApidogにインポートできます。

YAMLの保存先を選択してインポート

そして、ApidogというAPI管理ツールを使って、当該APIをテストしたりすることができるようになりますし、APIリクエストを送信して直ちに内蔵のモックサーバーを使って仮のレスポンスデータを取得することもできます。

button

yamlやJSONで綺麗なAPI仕様書を自動生成

また、yamlかJSONファイルをApidogにインポートすると、Apidogは、yaml・JSONファイルで記述されている情報に基づいて、非常に魅力的なAPI仕様書を自動的に生成してくれますし、この仕様書を簡単に他の人に共有することもできるので、非常に便利です。

Apidogで自動生成されたAPI仕様書
button
APIテスト効率化:ApidogでのJSONレスポンス管理法チュートリアル

APIテスト効率化:ApidogでのJSONレスポンス管理法

この記事では、ApidogでJSONレスポンスからアサーション設定、変数抽出、JSONパスのコピー方法を解説しました。APIテストの自動化と効率的なレスポンス検証が簡単になり、データの再利用も可能です。Apidogを使い、API機能を確認しましょう。

中村 拓也

11月 20, 2024

ApidogとAlgolia統合で実現する効率的なドキュメント検索チュートリアル

ApidogとAlgolia統合で実現する効率的なドキュメント検索

本記事は、AlgoliaをApidogと統合し、APIドキュメントの検索機能を改善する方法を紹介します。最適な検索設定を維持しながら、情報アクセスの迅速さと効率性を向上させ、ユーザー体験を向上させます。

中村 拓也

11月 19, 2024

Apidogで始める!IT技術者のためのテスト自動化完全ガイドチュートリアル

Apidogで始める!IT技術者のためのテスト自動化完全ガイド

Apidogを使用することで、テストエンジニアは作業効率と品質を大幅に向上させることができます。単体テストからパフォーマンステスト、CI/CD、定期的なタスクまで、ApidogはITプログラマーや技術愛好者のために自動化テストのベストプラクティスを提供します。

中村 拓也

11月 7, 2024