読者です 読者をやめる 読者になる 読者になる

じぶんメモ

プログラミングのメモ、日常のメモとか。

Railsでjsonを返却するAPIを作成する。

Railsjsonを返却するAPIを作成するには、Jbuilderが良さそう。

まずはモデル作成

rails g scaffold Product name:string price:integer category_id:integer

API用のルーティング設定

config/routes.rbをいじり、API用のルーティングを設定する。
APIにはバージョニングをするのが一般的らしい。

Rails.application.routes.draw do
  # json として返却させるようにformatを指定
  namespace :api, {format: 'json'} do
    # リソースのバージョニング
    namespace :v1 do
      resources :products
    end
  end
  # 以下省略

返却するjsonデータの編集

viewsにindex.json.jbuilderが作成されているので、中身を編集。

json.array!(@products) do |product|
  # product一覧のid, name , priceを取得する
  # => [{id: 1, name: "TEST", price: 100, category_id: 1}, ...]
  json.extract! product, :id, :name, :price, :category_id
end

jbuilderの詳しい関数に関しては、以下のページを参照。

github.com

jbuilderファイルとコントローラーファイルの配置場所を変更

routes.rbを編集したので、app/views/api/v1ディレクトリと、
app/controllers/api/v1ディレクトリ作成し、
views/products以下全てと、controllers/products_controller.rbを
それぞれのディレクトリに移動させる。
products_controller.rbは、namespaceが変わるため、クラスにモジュール名を設定する。

module Api
  module V1
    class ProductsController < ApplicationController

以上でOK。

補足

モデルには、to_jsonメソッドが用意されており、
render メソッドの第2引数に、 :jsonを設定すれば、json値として返却するようになる。