【Rails】簡単API作成
以下の記事のAPIのみの設定の部分を参考にさせていただきました。
RailsでAPI作成とAPIのテストのまとめ - Rails Webook
ここでは、Uberみたいにドライバーを登録していくサービスのAPIを想定。Driverクラスってのを作ってます。
routes.rbに設定
config/routes.rb
に以下のように記述します。
Rails.application.routes.draw do namespace :api, { format: 'json' } do resources :drivers end resources :drivers root to: 'drivers#index' end
まず以下でDriverクラスに関するnamespaceを、formatをjsonに指定して作成します。
namespace :api, { format: 'json' } do resources :drivers end
「namespace = 名前空間」とはファイル名を被らないようにだったり、属性によってクラスタリングするために使うための名前=パス、って解釈すれば大丈夫かな。以下あたりが参考になるかも
Railsだとこれを使えばDriverクラスについて自動で別の名前空間を作成してくれるんだね、すばらしい。
$ rake routes
でルーティングを確認してみると以下のように。
Prefix Verb URI Pattern Controller#Action api_drivers GET /api/drivers(.:format) api/drivers#index {:format=>"json"} POST /api/drivers(.:format) api/drivers#create {:format=>"json"} new_api_driver GET /api/drivers/new(.:format) api/drivers#new {:format=>"json"} edit_api_driver GET /api/drivers/:id/edit(.:format) api/drivers#edit {:format=>"json"} api_driver GET /api/drivers/:id(.:format) api/drivers#show {:format=>"json"} PATCH /api/drivers/:id(.:format) api/drivers#update {:format=>"json"} PUT /api/drivers/:id(.:format) api/drivers#update {:format=>"json"} DELETE /api/drivers/:id(.:format) api/drivers#destroy {:format=>"json"} drivers GET /drivers(.:format) drivers#index POST /drivers(.:format) drivers#create new_driver GET /drivers/new(.:format) drivers#new edit_driver GET /drivers/:id/edit(.:format) drivers#edit driver GET /drivers/:id(.:format) drivers#show PATCH /drivers/:id(.:format) drivers#update PUT /drivers/:id(.:format) drivers#update DELETE /drivers/:id(.:format) drivers#destroy root GET / drivers#index
おお、すげー。
これでコントローラを定義すれば完成。
ここではapi/drivers#index
の定義をまずする。
注意したいのは名前空間を設定したので、コントローラはapiディレクトリ中にあるものを編集するということ。つまりapp/controllers/api/drivers_controller.rb
を作成しないといけない。あと、module Api
の中に書かなければいけないということ。
module Api class ProductsController < ApplicationController def index @drivers = Driver.all render json: @drivers end end end
これでとりあえず動く。$ rails s
でWEBrickを立ち上げて、http://localhost:3000/api/drivers
とかにアクセスすると、
[{"id":1,"name":"Yuta","review":4,"phone":"xxxxxxxxxxx","comment":"This is a comment","created_at":"2015-03-08T18:31:07.846Z","updated_at":"2015-03-08T18:31:07.846Z"},{"id":2,"name":"Totz","review":2,"phone":"xxxxxxxxxxx","comment":"This is a second driver","created_at":"2015-03-10T00:50:27.366Z","updated_at":"2015-03-10T00:50:27.366Z"}]
みたいにブラウザに表示されます。簡単!