RailsアプリにWebAPIを実装するためGrapeを導入する

By | 2014年7月11日

■前提条件

データベースには以下のようなデータが入っている状態とします。

sqlite> select *  from ports;
1|晴海|東京都中央区|2014-07-10 23:53:32.503217|2014-07-10 23:53:32.503217
2|芝浦|東京都港区|2014-07-10 23:54:47.742586|2014-07-10 23:54:47.742586
3|油壺|神奈川県三浦市|2014-07-10 23:55:35.659253|2014-07-10 23:55:35.659253
sqlite>

idを指定して当該レコードを取得するため、以下のようなURLで呼び出せるようにします。

http://サーバ名/api/v1/ports/1

 

■手順

(1)grapeとjbuilderをインストールします。

$ vi Gemfile
gem 'grape'
gem 'grape-jbuilder'
$ bundle install

 

(2)APIを記述します。

app/にapiディレクトリを作成し、その中にapi.rbという名前でファイル作成します。

# app/api/api.rb
class API < Grape::API
  format :json
  default_format :json
  prefix "api"
  version "v1", using: :path

  resource :ports do
    get ':id', jbuilder:'port' do
      Port.find(params[:id])
    end
  end
end

 

(3)次にルーティングを設定します。

config/routes.rbの中に、

mount API => '/'

を追記します。

# config/routes.rb
Rails.application.routes.draw do
  mount API => '/'
  ・・・
  ・・・
end

 

(4)パスの設定をします。

config/application.rbの中に、

config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]

を追記します。

# config/application.rb
module Fiddlercrab
  class Application < Rails::Application
    ・・・・
    config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
    config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
  end
end

 

(5)ルーティングを確認してみます。

$ rake routes
(in /*******/*******/*******)
Prefix Verb URI Pattern Controller#Action
   api      /           API

正しく反映されているようです。

 

(6)APIを叩いてみます。

# curl http://サーバ名/api/v1/ports/1
{"id":1,"name":"晴海","address":"東京都中央区","created_at":"2014-07-10T23:53:32.503Z","updated_at":"2014-07-10T23:53:32

取得できました。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です