DesignAssembler

備忘録に近い

Rails5.0.0.beta3のActionController::APIを使う

そろそろRC版が来るRails5のbeta3を触ってみました。

$ bundle init

でGemfileを生成します。

# A sample Gemfile
source "https://rubygems.org"

gem "rails", github: "rails/rails"

bundle installします。

$ bundle install

少し時間かかりますがインストールできます。

$ bundle exec rails -v
Rails 5.0.0.beta3

5.0.0.beta3です。

$ bundle exec rails new rails_5_api --api

createしてからremoveしてます。面白いですね。

サンプルアプリケーション

今日も犬です。

$ bin/rails g model dog name:string age:string
      invoke  active_record
      create    db/migrate/20160331101719_create_dogs.rb
      create    app/models/dog.rb
      invoke    test_unit
      create      test/models/dog_test.rb
      create      test/fixtures/dogs.yml
$ bin/rails db:migrate
== 20160331101719 CreateDogs: migrating =======================================
-- create_table(:dogs)
   -> 0.0053s
== 20160331101719 CreateDogs: migrated (0.0057s) ==============================

rakeじゃなくてrailsで通るようになってますね。

controllerを作ります

$ bin/rails g controller dog show

app/controller/application.rbを見ると、親クラスがActionController::APIになっていますね。

#app/controller/application.rb
class ApplicationController < ActionController::API
end

コンソールで適当にデータ作ります。

サーバーを立ち上げます。

$ bin/rails s -p 3007
=> Booting Puma
=> Rails 5.0.0.beta3 application starting in development on http://localhost:3007
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma starting in single mode...
* Version 3.2.0 (ruby 2.2.2-p95), codename: Spring Is A Heliocentric Viewpoint
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3007
Use Ctrl-C to stop

お、Webrickじゃなくなってますね。
ActionCableはシングルスレッドじゃダメらしいのでマルチスレッドOKなPumaになったようです。

routesとかcontrollerとかよしなにしてリクエスト投げます

$ curl localhost:3007/dog/1
{"id":1,"name":"inu1","age":"3","created_at":"2016-03-31T10:22:01.682Z","updated_at":"2016-03-31T10:22:01.682Z"}

返ってきました。

ソースコード読む

とりあえずソースコード読みます。
ActionController::API

github.com

Metalクラスをオーバーライドしています。

前半ではミドルウェア周りのコードですね。

中盤からのMetalクラスはAbstractController::Baseをオーバーライドしています。

ここではparamsとかparams=とかrequestとかが書いてあります。

おおよそrails_apiをマージしただけのような感じでした。 github.com

参考

totutotu.hatenablog.com