これは何?
大規模なアプリケーションを開発したりする場合、
RailsをAPIサーバーとして利用し、APIクライアントは別に用意するケースが多い。
(弊社ではReactNative)
その時に、RailsをどのようにしてAPIサーバー専用とさせるのかの基礎知識を記載して行く。
僕も学びながらなので是非ご指摘あれば教えてください。
API化に必要な知識
基本的には、APIクライアントからのHTTPリクエストが来たら、
そのリクエストに応じたレスポンスを返してあげるというそれだけ。
そのレスポンス部分だけをRailsでやりますよということ。
リクエストの形はHTTPリクエストなのでURLで来て、
Railsサーバーで色々ロジックを動かして、
レスポンスの形はJSON形式で返してあげるのが基本らしいです。
これで1セット。
なので、Railsで普段ウェブアプリケーションを開発している人からしても、取り立てて新しいことといえばJSONで出力するという部分だけ。
今回はそこを重点的に見ていきたいと思います。
JSON出力
RailsでのJSON出力というと、rabl
、jbuilder
、active_model_serializers
の三つがメインらしいです。
どれだけ高速にJSONを出力できるかのパフォーマンスで見ると、
active_model_serializers
が非常に良いとのことなので、今回はそれを使って行きます。
active_model_serializersを使って見る
まずは、使う為の下準備。
gem 'active_model_serializers'
bundle install
ちなみに、jbuilder
は標準でGemfileに追加されてしまっている為、わかりやすくするためにコメントアウトしてもいいかもしれない。
サンプルを作って動かす
今回はUserテーブルを作成して、そこにいくつかのデータをいれたものをブラウザでJSON出力できるかどうかまでを見ていきます。
※ 出力したいデータは適当に自分で突っ込んでください。
bundle exec rails generate model User name:string email:string
bundle exec rails generate serializer User
get 'users/index'
# 特に何もなし
attributes :id, :name, :email
def index
@users = User.all
render json: @users
end
ここまでできたら、あとはブラウザで、
localhost:3000/users/index.json
と打ち込めばUserテーブルに保存されているデータが出力されると思います。
ちなみに、ChromeでJSONを見易くするアドオンがあるので是非使って見てください。
こちらの記事が大変参考になりましたので、応用したい方はこちらも見てください。