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
Metalクラスをオーバーライドしています。
前半ではミドルウェア周りのコードですね。
中盤からのMetalクラスはAbstractController::Baseをオーバーライドしています。
ここではparamsとかparams=とかrequestとかが書いてあります。
おおよそrails_apiをマージしただけのような感じでした。 github.com