トップ «前の日記(2019-09-21) 最新 次の日記(2019-09-23)» 編集

2019-09-22 [長年日記]

_ RubyでOpenAPI clientの動的生成させてみた

OpenAPI に対応してる API の client 側を触る機会ができたのでせっかくならということで client の動的生成させてみた。本当はクライアントサイドは Ruby より JavaScript とかの方が充実しているような気がしないでもないけど、一応第一言語なので、悩むことが少なくていいんじゃないかと思って試してみた。

動的生成

notonthehighstreet/svelte: Dynamic Ruby API Client from Swagger JSON Spec

Svelte::Sevice.create(module_name: <NAME>, (url|json): <String>)

と呼ぶと、

Svelte::Sevice::NAME

という Module が生成される。ここ以下の名前空間に OpenAPI の path に応じた module がどんどんできていく。最終的には

Module::Path::To::Resource.operation_id_to_snake_case

みたいなメソッドができあがる。これを call すると、API を叩ける。他の option で大事なのはたぶん

  • options
    • protocol
    • auth

辺り。

とにかく OpenAPI の JSON を読みながら module を掘り、メソッドを call していくことができる。なるほどこれは便利だ。

ついでに静的生成

使い方はこんな感じ。

npx openapi-generator generate -i path/to/api.json -g ruby

OpenAPI 3 対応

OpenAPI parser と名乗っているものが OpenAPI 3 対応し始めている。

今回は試してません。