grape railsインタフェース応用
2981 ワード
1.概要Mobile Appの増加に伴い、RailsでAPI Baseプロジェクトを行う場合、railsが持参したCとV層が煩雑に見え、grapeはRailsと完璧に融合したAPIインタフェースの迅速な構築を助けることができます.
2.インストール
appファイルの下にapiフォルダを作成し、関連インタフェースはすべてここにあります.
3.関連インタフェースの作成(2つの書き方が簡単に書かれている)
routes.rb:
それぞれ実行:
フォルダ(app/api/twitter/api.rbなど)を定義することもできます.
routes.rb
アクセス操作の追加削除
関連リンク:https://github.com/ruby-grape/grape
2.インストール
#gemfile :
gem 'grape', '~> 1.0.2' #
appファイルの下にapiフォルダを作成し、関連インタフェースはすべてここにあります.
# config/application.rb
config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
3.関連インタフェースの作成(2つの書き方が簡単に書かれている)
#app/api/test_api.rb
class TestAPI < Grape::API #
format :json
get 'get_test' do
{message: "Hello #{params[:name]} via get"}
end
post 'post_test' do
{message: "Hello #{params[:name]} via post"}
end
resource :user do
desc "Return a user."
get :test do
@user = User.first
end
end
end
routes.rb:
mount TestAPI => '/'
それぞれ実行:
#
$ curl localhost:3000/get_test?name=test
#=> {"message":"Hello test via get"}
$ curl -d 'name=test' localhost:3056/post_test
#=>{"message":"Hello test via post"}
$ curl localhost:3000/user/test
#=> user {id:...}
フォルダ(app/api/twitter/api.rbなど)を定義することもできます.
module Twitter
class API < Grape::API
version 'v1', using: :header, vendor: 'twitter'
# version 'v1', using: :path
format :json
# prefix :api
resource :grade_schools do
desc 'Return grade_schools 20 records'
get :index do
GradeSchool.limit(20)
end
desc 'Return a grade_school.'
params do
requires :id, type: Integer, desc: 'GradeSchool id.'
end
route_param :id do
get do
GradeSchool.find(params[:id])
end
end
desc 'Create a grade_school.'
params do
requires :grade_school, type: String, desc: 'grade_school paramters.'
end
post do
GradeSchool.create!({ name: params[:name],
grade: params[:grade] })
end
desc 'Update a grade_school.'
params do
requires :id, type: String, desc: 'grade_school ID.'
requires :grade, type: String, desc: 'Your grade_school.grade'
end
put ':id' do
GradeSchool.find(params[:id]).update({grade: params[:grade]})
end
desc 'Delete a grade_school.'
params do
requires :id, type: String, desc: 'grade_school ID.'
end
delete ':id' do
GradeSchool.find(params[:id]).destroy
end
end
end
end
routes.rb
mount Twitter::API => '/'
アクセス操作の追加削除
関連リンク:https://github.com/ruby-grape/grape