Imgur OpenAPI
Imgur APIのOpenAPI specを記述するプロジェクト、imgur-openapi。
RustでImgur APIのクライアントをつくる中で、通信とデータモデルのコードを自動生成したかったので、これをつくりはじめた。このクライアントの製作過程については、imgurianという記事により詳しく書いている。Imgur APIのドキュメントは情報が不足しすぎているので、試しにリクエストを送りながら、手探りで情報をまとめつつ定義を編纂していっているところ。
OpenAPI Specを記述するにあたり、CIで使えるようなLinterが欲しい。OpenAPIにはコミュニティによるLinterが幾つもある。OpenAPI.Toolsというページに、周辺ツールの情報がよくまとめられている。stoplightio/spectralやredocly/openapi-cliというLinterを実際に利用してみて、最終的にredoclyのものが小回りが効いて良さそうだったので、imgur-openapiではこれを利用することにした。違反箇所が見つかったときにGitHubのPull Requestで注釈してくれる機能が欲しかったが、探してみた感じでは既存のものが見当たらなかったので、r7kamura/redocly-problem-matchersというのをつくって利用している。
OpenAPI specから自動生成したRust向けのコードを、r7kamura/imgur_openapi-rsという形でライブラリ化して管理することにしている。これまでつくっていたImgur APIのクライアントも、このライブラリを利用した実装への移行が終わり、CLIと通信部分との繋ぎ込みの面倒を見るだけで良くなったので、随分とコンパクトになったと思う。どうせならCLI部分も自動生成したいところだが……ユーザーインターフェースは例外の塊なので、そう上手くはいかないかも。
今回色々とツールをつくってOpenAPIダンスを踊らされたが、前にパッケージリリースの自動化の記事で書いたように、Gitタグの生成やパッケージレジストリへの登録などをある程度自動でやってくれる仕組みを整えておいたので、意外と苦も無くことを進められている。