LoginSignup
4
1

More than 3 years have passed since last update.

Hello, OpenAPI - OpenAPI GeneratorでRubyクライアントを生成

Last updated at Posted at 2020-08-22

openapi-generator-4.3.1 ruby-2.7.1p83

はじめに

引き続き OpenAPI で遊んでいる。今回は前回PetStore モックサーバに対して、openapi-generator1 で生成した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.rblib/openapi_client を意識すれば良さそうです

生成したコードの使い方

lib 以下にクライアント関連の Ruby モジュールが生成されている。ドキュメントがあんまりないので、コード読みながら手探りで作ったクライアントはこんな感じ

pet-client.rb
$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) で渡す dataHash で渡す。JSON の時のキーそのままではだめで、スネークケースで渡さないといけない(PhotoUrls > photo_urls

このクライアントでモックサーバに対して、GET POST ともに動いているようなので、ひとまずよしとします。まだ Hello World レベルですが、ここまではいい感じで使えるコードが生成されているように感じます。あとは、もうちょっとドキュメントあると嬉しいのだが...できればサンプルコードとか。ご存知のかた教えて下さい

さて、とりあえず使い方がわかった気がするので、次にいきます

4
1
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
4
1