##API
Railsは必要なHTMLを組み立てて返すのが仕事ですが、JavaScriptから便利に扱えるようにJSON形式でデータを返すようにすることもできます。
HTMLだけではなく、必要なデータだけをJSONなどの形式で返すサーバの仕組みのことをAPIと呼びます。
##APIの作り方
元々あるコントローラに対して非同期通信の場合には非同期通信用のデータを返す実装を付け加えます。
コントローラーの1つのアクションの中でHTMLとJSONなどのフォーマット毎に条件分岐できる仕組みがあります。
フォーマットごとに処理を分けるには、respond_toを使用します。
##respond_to
respond_toメソッドを使うと、リクエストに含まれているレスポンスのフォーマットを指定する記述を元に条件分岐ができます。
【例】
respond_to do |format|
format.html { render ... } # この中はHTMLリクエストの場合に呼ばれる
format.json { render ... } # この中はJSONリクエストの場合に呼ばれる
end
HTMLを返す場合は、該当するビューを呼びその中データを生成していましたが、JSONを返す場合はRubyのハッシュの状態のままrenderメソッドに渡すだけでJSONに変換してくれるので、コントローラーから直接データを返すことができます。
【例】
respond_to do |format|
format.json {
render json: { id: @user.id, name: @user.name }
}
end
上記のように記述することでcontrollerだけでレスポンスを完結させることもできますが、jbuilderを使用する、つまりファイルを分割することで、よりわかりやすい形でJSON形式のデータを作ることができます。
【例】
json.content @message.content
=> { content: "@messageのcontent" }
jbuilderは左がキー・右がバリューのようなハッシュの形になっています。
上記の例だと、json.contentがkeyで、@message.contentがvalueとなります。