grape是一個用來建立API的framework,它有下面的優點:
grape的一個好處是可以在rails中使用。設定的步驟如下:
grape
的gem。Gemfile
gem 'grape'
app/api
之下。config/application.rb
module MyApp
class Application < Rails::Application
# ...
# Support grape API
config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app')]
# ...
end
end
app/api/test.rb
module Api
class Test < Grape::API
get :ping do
{ data: "pong" }
end
end
end
config/routes.rb
Rails.application.routes.draw do
# ...
mount Api::Test => '/api'
# ...
end
localhost:3000/api/ping
就可以呼叫API了。寫測試是非常重要的,寫api的測試更是重要。api的測試與controller非常像,都是模擬送出request後,檢查對應的回傳結果。但controller通常不會測試body的內容(因為這是屬於view的測試),而api的測試就會直接比對body輸出的結果。
RSpec.configure do |config|
# ...
config.include RSpec::Rails::RequestExampleGroup, type: :request, file_path: /spec\/api/
# ...
end
require 'rails_helper'
describe Api::Test do
context 'GET /api/ping' do
it 'should return 200 and pong data' do
get '/api/ping'
expect(response.status).to eq(200)
expect(JSON.parse(response.body)).to eq({ 'data' => 'pong' })
end
end
end
rspec spec/api/test_spec.rb
使用grape的另一個好處是它可以自動生成swagger的API文件,所以只要API寫好了,API文件就寫好了。除此之外,還可以整合swagger-ui直接將API文件掛載在rails的routes下,超級方便的啊。下面是設定的步驟:
grape-swagger
與grape-swagger-rails
,基本上我們會將這兩個gem放在development的group下,因為production用不到。Gemfile
group :development do
gem 'grape-swagger'
gem 'grape-swagger-rails'
end
add_swagger_documentation
,讓grape可以自動生成swagger doc。app/api/test.rb
module Api
class Test < Grape::API
get :ping do
{ data: "pong" }
end
if Rails.env.development?
add_swagger_documentation(
mount_path: 'swagger_doc',
hide_format: true,
hide_documentation_path: true
)
end
end
end
更多有關grape-swagger的設定選項可以參考grape-swagger的文件。
config/initializers/grape_swagger_rails.rb
if Rails.env.development?
GrapeSwaggerRails.options.url = "swagger_doc"
GrapeSwaggerRails.options.app_name = 'My App'
GrapeSwaggerRails.options.app_url = '/api/'
end
config/routes.rb
Rails.application.routes.draw do
# ...
if Rails.env.development?
mount GrapeSwaggerRails::Engine => '/apidoc'
end
# ...
end
localhost:3000/apidoc
就可以看到由swagger-ui生成的API文件了。在這裡我們介紹了怎麼在rails中使用grape,有空再跟大家分享怎麼使用grape來建立API(這才是重點啊)。