0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めての OpenAPI 体験:API と Webhook 仕様書作成の備忘録

Posted at

初めて OpenAPI で API と Webhook の仕様書を書いてみた

最近、初めて OpenAPI を使って API と Webhook の仕様書を書いてみました。初めての経験だったので、調べながら進めましたが、その際の学びや気づきを備忘録としてまとめておきます。同じように OpenAPI に挑戦する人の参考になれば幸いです。

使用ツール:Swagger Editor

仕様書を作成する際に使用したのは Swagger Editor です。このツールは、リアルタイムで変更が反映される上に、エラー箇所もハイライトしてくれるので、とても便利でした。

ただし、いくつか問題もありました。特に「改行」がそのまま反映されず、HTML の <br/> タグを使わないと改行ができない点です。これは Swagger Editor の仕様なのか、他のツールでも共通なのかは分かりませんが、少し不便に感じました。その一方で、リストやテーブルは HTML で記述できたので、結果的には良かったと思います。

tags の扱いについて

API (paths) では tags を利用してエンドポイントをまとめられるのですが、Webhook には tags が反映されませんでした。Webhooks にも tags が使えるのかもっと調べる余地がありそうですが、今回は特に必要性を感じなかったので、一旦保留としました。

Webhooks と OpenAPI バージョンの関係

Webhooks を OpenAPI で表現するには、バージョン 3.1 以降が必要です。最初は OpenAPI 3.0 で書き始めましたが、Webhooks がサポートされていないことに気づき、急遽 OpenAPI 3.1 に切り替えることにしました。

GET パラメータでの連想配列の扱い

GET パラメータで連想配列を指定する方法が分からず、少し悩みました。PHP では param[key][]=value のように記述すると、key が確定していない配列でも自動でパースしてくれますが、これを OpenAPI で表現するのが難しかったです。

とりあえず type: arrayparam[key][] としてパラメータを定義してみましたが、UI 上で key を変更できないため、もっと良い方法があるかもしれません。引き続き調査が必要です。

allOf と enum の関係

allOf を使って enum を指定する際、元の値が上書きされず、追加されるということが分かりました。enum 以外の要素を先に定義し、その後 allOfenum を追加すると、よりきれいに整理された仕様書を作成できることが分かりました。例えば以下のような形です:

Status:
  type: string
  description: ステータス
StatusSuccess:
  allOf:
    - $ref: '#/components/schemas/Status'
    - enum:
      - updated
      - created
StatusError:
  allOf:
    - $ref: '#/components/schemas/Status'
    - enum:
      - not found
      - validation error

認証ヘッダーの指定

Authorization ヘッダーは securitySchemes で指定することができます。例えば、Basic 認証の場合は以下のように記述します:

type: http
scheme: basic

また、独自の認証ヘッダーを設定したい場合は、次のように記述します:

type: apiKey
name: original-header
in: header

複数のタイプの指定

string | null のように複数の型を許可する場合、oneOf を使用します。例えば:

oneOf:
  - type: string
  - type: 'null'

nullable を指定する際には、型を 'null' と文字列として定義する必要があることも覚えておくと良いです。


以上、初めての OpenAPI での仕様書作成を通じて学んだポイントをまとめました。最初は戸惑う部分もありましたが、次回以降はもっとスムーズに書けるのではないかと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?