 
はじめに
引き続き OpenAPI で遊んでいる。今回は前回の PetStore
モックサーバに対して、openapi-generator
1 で生成したRubyクライアントからアクセスしてみる
インストール
openapi-generator
をインストールするところから
$ brew install openapi-generator
次に ruby
クライアントの生成
$ openapi-generator generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g ruby -o .
何やらたくさんファイルが生成される
.
├── Gemfile
├── README.md
├── Rakefile
├── docs
│ ├── ApiResponse.md
│ ├── Category.md
│ ├── Order.md
│ ├── Pet.md
│ ├── PetApi.md
│ ├── StoreApi.md
│ ├── Tag.md
│ ├── User.md
│ └── UserApi.md
├── git_push.sh
├── lib
│ ├── openapi_client
│ │ ├── api
│ │ │ ├── pet_api.rb
│ │ │ ├── store_api.rb
│ │ │ └── user_api.rb
│ │ ├── api_client.rb
│ │ ├── api_error.rb
│ │ ├── configuration.rb
│ │ ├── models
│ │ │ ├── api_response.rb
│ │ │ ├── category.rb
│ │ │ ├── order.rb
│ │ │ ├── pet.rb
│ │ │ ├── tag.rb
│ │ │ └── user.rb
│ │ └── version.rb
│ └── openapi_client.rb
├── openapi_client.gemspec
└── spec
├── api
│ ├── pet_api_spec.rb
│ ├── store_api_spec.rb
│ └── user_api_spec.rb
├── api_client_spec.rb
├── configuration_spec.rb
├── models
│ ├── api_response_spec.rb
│ ├── category_spec.rb
│ ├── order_spec.rb
│ ├── pet_spec.rb
│ ├── tag_spec.rb
│ └── user_spec.rb
└── spec_helper.rb
クライアントに関しては lib/openapi_client.rb
と lib/openapi_client
を意識すれば良さそうです
生成したコードの使い方
lib
以下にクライアント関連の Ruby モジュールが生成されている。ドキュメントがあんまりないので、コード読みながら手探りで作ったクライアントはこんな感じ
$LOAD_PATH.push('.')
require 'openapi_client'
OpenapiClient.configure do |config|
config.base_path = ""
config.host = "localhost:4010"
config.api_key['api_key'] = 'special_key'
#config.debugging = true
end
api_instance = OpenapiClient::PetApi.new
data = { "id": 112354, "category": { "id": 0, "name": "taro" }, "name": "john", "photo_urls": [ "http://image.com" ], "tags": [ {
body = OpenapiClient::Pet.new(data)
begin
puts "GET"
pet = api_instance.get_pet_by_id(1)
puts JSON.pretty_generate(pet.to_body)
puts "POST"
pet1 = api_instance.add_pet(body, {:header_params => {"Content-Type": "application/json", "accept": "application/json"}})
puts pet1.class
rescue OpenapiClient::ApiError => e
puts "Exception when calling PetApi->add_pet: #{e}"
end
-
Pet.new(data)
で渡すdata
はHash
で渡す。JSON
の時のキーそのままではだめで、スネークケースで渡さないといけない(PhotoUrls
>photo_urls
)
このクライアントでモックサーバに対して、GET
POST
ともに動いているようなので、ひとまずよしとします。まだ Hello World レベルですが、ここまではいい感じで使えるコードが生成されているように感じます。あとは、もうちょっとドキュメントあると嬉しいのだが...できればサンプルコードとか。ご存知のかた教えて下さい
さて、とりあえず使い方がわかった気がするので、次にいきます