Grapeとは
Grape gemはruby用のREST-APIフレームワークです。簡単にRESTfulなAPIを開発するための単純なDSLを提供することによって、Railsとシナトラなどの既存のWebアプリケーションフレームワークを補完するために設計されています。
Grape gemの実装
Grape gemのインストール
まず、GemfileにGrapeを追加します。
Gemfile
gem 'grape' |
bundle installをします。
bundle install |
model追加
modelを追加してみます。
rails g model test_data name:string age:integer rake db:migrate |
application.rbの設定
application.rbに以下のように書き、apiのパスを設定します。
application.rb
config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb') config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')] |
API作成
appフォルダーにapiフォルダーを追加します。
ここに二つのファイルを作ります。一つは実際にapiとして動くファイルで、もう一つはそのファイルをmountするファイルです。
下のように書いてみます。
api/user/data.rb
resource :user_data do desc "List all User" get do TestData.all end end |
api/api.rb
class API < Grape::API prefix 'api' version 'v1', using: :path mount User::Data end |
APIのルーティング追加
route.rbにルーティング追加します。
route.rb
mount API => '/' |
それからrailsのserverを起動します。
rails server |
タミナールに下のように入力してみます。
curl http://localhost:3000/api/v1/user_data.json |
そうすると、databaseに何もないので 「[ ]」 しか出てこないです。
では、データーを入れてみましょう。
まずはdata.rbにソースコードを追加します。もっと楽にするようにヘルパーを書きます。
helpers do def user_params ActionController::Parameters.new(params).permit(:name, :age) end def set_user @user = TestData.find(params[:id]) end end |
そして、下のようにcreateのコードを書きます。
desc "create a new user" params do requires :name, type: String requires :age, type: Integer end post do TestData.create!(user_params) end |
タミナールにこう書くと、
curl http://localhost:3000/api/v1/user_data.json -d "name=Jo&age=30" |
{"id":1,"name":"Jo","age":30,"created_at":"2016-07-26T07:15:11.212Z","updated_at":"2016-07-26T07:15:11.212Z"} |
簡単にデーターベースに入れ込みます。
deleteとupdateも同じように作成します。
desc "delete an user" params do requires :id, type: String end delete ':id' do set_user @user.destroy! end desc "update an user" params do requires :id, type: String end put ':id' do set_user @user.update(user_params) end |
タミナールで実行してみると、
curl -X DELETE http://localhost:3000/api/v1/user_data/1.json {"id":1,"name":"Jo","age":30,"created_at":"2016-07-26T05:11:16.608Z","updated_at":"2016-07-26T05:11:16.608Z"} |
もう一度データーを作って
curl http://localhost:3000/api/v1/user_data.json -d "name=Jo&age=30" {"id":2,"name":"Jo","age":30,"created_at":"2016-07-26T05:16:45.169Z","updated_at":"2016-07-26T05:16:45.169Z"} |
curl -X PUT http://localhost:3000/api/v1/user_data/2.json -d "age=100" true |
showの部分はちょっと迷いましたけど、
desc "show an user" params do requires :id, type: String end route_param :id do get do set_user end end |
こういうふうにGETをroute_paramに変えると簡単にできました。