この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
■前提条件
データベースには以下のようなデータが入っている状態とします。
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
取得できました。