■前提条件
データベースには以下のようなデータが入っている状態とします。
[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]
取得できました。