OpenAPI使い始めるときに全体像を掴みたいので調査

# 背景

OpenAPIについて、個々の記事はあるが、使い始める際の概観記事があんまりなかったので、自分の理解のためにも一度まとめてみた。手を動かせてない箇所もあるので、後々更新する。

# OpenAPIとは

- 特定記法でAPI仕様を書くと、そこからREST APIのコードやドキュメントを生成できるフォーマット
- コード生成先のプログラミング言語は多い
    - コードジェネレータは選択肢がある
        - 全体として公式swagger-codegenよりもopenapi-generatorのほうがよいらしい
            - [OpenAPI generatorを試してみる - Qiita](https://qiita.com/amuyikam/items/e8a45daae59c68be0fc8)
                > もともとSwaggerの時代からSwagger CodeGenとしてコード生成のツールは提供されており今でも利用可能なのですが、どうも開発者同士で反りが合わなかったらしくコミュニティ主導のツールとしてOpenAPI Specificationは誕生しました。
                
                > 私が2018年9月頃にSwagger CodeGenを触った感触でやはりSwagger CodeGenはOpenAPI Specification v3.0への対応が遅れていると感じたため、2019年3月現時点でもOASv3.0を利用する場合は様々な言語に対応しているOpenAPI generatorを利用するのが良さそうです。
        - 言語ごとに特性があるのでgoだと別のgeneratorが採用されたりしてる
            - go-swaggerはOpenAPIv2のみ、oapi-codegenはv3対応等。
            - [Go の Open API 3.0 のジェネレータ oapi-codegen を試してみた | フューチャー技術ブログ](https://future-architect.github.io/articles/20200701/)
- 関連する概念にSwaggerがある、その違いは以下
    - [OpenAPIとSwagger 入門](https://zenn.dev/chida/articles/25f4016560f6bf)
        - OpenAPI: RESTful APIの仕様を記述するためのフォーマット
        - Swagger: OpenAPI仕様をベースになにかするツール群。
          - Swaggerのブログにある定義: [What is OpenAPI? Swagger vs. OpenAPI | Swagger Blog](https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/)
    - OpenAPI Specificationを書くファイルフォーマットはJSON, YAMLどちらも選べる
- 最新バージョンは[3.1.0](https://github.com/OAI/OpenAPI-Specification#current-version---310)
    - 一昔前の(2017年以前)の記事だとOpenAPI v2の話が出てくることがある
    - v2とv3の違いは
        - [OpenAPI Specification 3.0での変更点について | NTT Communications Developer Portal](https://developer.ntt.com/ja/blog/fbb1636b-b3f8-47b9-ac7c-9080a5d9e7ae)
            - 構造修正、矛盾の解消が主
            - semantic versioningでOpenAPIのバージョンが管理されるように



# 開発ツール

- [本当に使ってよかったOpenAPI (Swagger) ツール | フューチャー技術ブログ](https://future-architect.github.io/articles/20191008/)
    - [Stoplight Studio](https://stoplight.io/studio)
        - OpenAPIのフォーマットに精通していなくても、GUIでAPIを作ったらOpenAPIのyamlファイルがexportできるツール
        - マネージドなMockサーバを立てられる
        - 料金体系
            - [API Design Plans and Pricing | Stoplight | Stoplight](https://stoplight.io/pricing)
            - Freeプランだとチーム3名まで、2プロジェクトまで使える
            - 次のTierはStarterプラン、チーム5名まで、50プロジェクトまで使える
    - [Prism](https://stoplight.io/open-source/prism)
        - Stoplight社が出しているOSSモックサーバ、手元でモックサーバとして使える
        - Stoplight Studioで勝手にモックサーバが出来上がるので裏で使ってるのかな
    - [Dredd](https://dredd.org/en/latest/)
        - API仕様と実装のズレをテストできる

- 公式ツール群
    - Swagger-UI
        - OpenAPI Specificationからドキュメントをwebサーバ上で見れるもの, 実態はSPA
    - Swagger-Editor
        - ブラウザ上でOpen API Specificationを書くためのエディタ
        - OpenAPI仕様をyamlでガシガシ書く
        - 最初はStoplight Studioのほうがオススメ
    - Swagger-Codegen
        - OpenAPI Specificationからソースコード生成
        - 上で書いたがopenapi-generatorを使うことが多いかも
- ReDoc
    - OpenAPI Specificationからhtmlファイルのドキュメント生成
    - サーバ建てずともローカルのhtmlファイルで見れる、CDで静的サイト化できる


# OpenAPI Specificationの書き方

- 公式: [https://github.com/OAI/OpenAPI-Specification](https://github.com/OAI/OpenAPI-Specification)
- [OpenAPI (Swagger) 超入門 - Qiita](https://qiita.com/teinen_qiita/items/e440ca7b1b52ec918f1b)
    - これが全体構造をまず理解するにはわかりやすい
- [openapi-generator フレンドリーな OpenAPI ドキュメントを書く](https://zenn.dev/beijaflor/articles/3d554e51bb20c6)


# 開発手法

- [スキーマファースト開発のためのOpenAPI（Swagger）設計規約 | フューチャー技術ブログ](https://future-architect.github.io/articles/20200409/)
    - スキーマファースト
- [OpenAPI Generatorを使ったコードの自動生成とインタフェースの守り方](https://zenn.dev/angelica/articles/3b7ac906f73638)
    - Generator-Gapパターン: 自動生成コードと付き合うときの心構え
        - [デザインパターン紹介](https://www.hyuki.com/dp/dpinfo.html#GenerationGap) Generator-Gapパターン
            - バージョン1のOpenAPI仕様を元にコードを自動生成し、追加でコードを書く
            - バージョン2のOpenAPI仕様を元に再度コードを自動生成したら、書いたコードが消えちゃった！
            - にならないため、interfaceと型だけ生成させて、自分で書いたコードまでいじられないようにしようという話。
    - Consumer-driven-Contractテスト: API境界のテスト手法？？