makotton.com

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

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

■前提条件

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

[bash gutter=”0″]
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>
[/bash]

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

[bash gutter=”0″]
http://サーバ名/api/v1/ports/1
[/bash]

 

■手順

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

[bash gutter=”0″]
$ vi Gemfile
[/bash]

[bash]
gem ‘grape’
gem ‘grape-jbuilder’
[/bash]

[bash gutter=”0″]
$ bundle install
[/bash]

 

(2)APIを記述します。

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

[bash]
# 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
[/bash]

 

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

config/routes.rbの中に、

[bash gutter=”0″]
mount API => ‘/’
[/bash]

を追記します。

[bash]
# config/routes.rb
Rails.application.routes.draw do
mount API => ‘/’
・・・
・・・
end
[/bash]

 

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

config/application.rbの中に、

[bash gutter=”0″]
config.paths.add File.join(‘app’, ‘api’), glob: File.join(‘**’, ‘*.rb’)
config.autoload_paths += Dir[Rails.root.join(‘app’, ‘api’, ‘*’)]
[/bash]

を追記します。

[bash]
# 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
[/bash]

 

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

[bash gutter=”0″]
$ rake routes
(in /*******/*******/*******)
Prefix Verb URI Pattern Controller#Action
api / API
[/bash]

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

 

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

[bash gutter=”0″]
# 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
[/bash]

取得できました。

 

モバイルバージョンを終了