私はいろいろ読んでいて、 Grape for ruby と呼ばれるこのマイクロフレームワークを見つけました。私は現在Sinatraを使用して Web インターフェイスを処理していますが、Grape を実装してアプリの API の側面を処理したいと考えています。このトピックに関する有益な提案が見つかりません。グレープのドキュメントには、「グレープは Ruby 用の REST に似た API マイクロ フレームワークです。RESTful API を簡単に開発するためのシンプルな DSL を提供することで、Rack で実行するか、Rails や Sinatra などの既存の Web アプリケーション フレームワークを補完するように設計されています。」では、両方を組み合わせる公式の方法があるはずですよね?このアプリは Heroku でも実行されます。
1 に答える
探しているフレーズは次のとおりです。
- 複数のラック アプリ
- ラックミドルウェア
- マッピング URL ラック シナトラ
そういうこと。Grape、Sinatra、Rails はすべてRackアプリです。これが意味することは、Grape アプリ、Sinatra アプリ、Rails アプリをビルドしてから、Rack を使用してそれらを実行できるということです。これらはすべて、インターフェースを共有するため、Rack に準拠しているためです。
これが実際に意味することは、アプリケーションを作成し、それらをラックアップファイルに入れて実行することです。2 つの Sinatra アプリを使用した短い例 (ただし、それらは任意の数の任意の種類の Rack アプリである可能性があります):
# app/frontend.rb
require 'sinatra/base'
# This is a rack app.
class Frontend < Sinatra::Base
get "/"
haml :index
end
end
__END__
@@ layout
%html
= yield
@@ index
%div.title This is the frontend.
# app/api.rb
# This is also a rack app.
class API < Sinatra::Base
# when this is mapped below,
# it will mean it gets called via "/api/"
get "/" do
"This is the API"
end
end
# config.ru
require_relative "./app/frontend.rb"
require_relative "./app/api.rb"
# Here base URL's are mapped to rack apps.
run Rack::URLMap.new("/" => Frontend.new,
"/api" => Api.new)
Grape README から Twitter API の例を追加する場合:
# app/twitter_api.rb
module Twitter
# more code follows
# config.ru
require_relative "./app/twitter_api.rb" # add this
# change this to:
run Rack::URLMap.new("/" => Frontend,
"/api" => API,
"/twitter" => Twitter::API)
うまくいけば、それで十分です。どこを見ればよいかがわかれば、たくさんの例があります。use
( http://www.sinatrarb.com/intro#Rack%20Middlewareを参照)を使用して、Sinatra アプリ内で他のアプリを実行することもできます。Grapemount
もキーワードを提供しているようです。利用可能な方法はたくさんあり、最初は少し混乱するかもしれませんが、試してみて、何ができるか、何が一番好きかを確認してください。その大部分は好みによるものなので、正しいと感じるものを採用することを恐れないでください。Rubyはコンピューターよりも人間のためのものです:)
編集:グレープアプリが「内部」にあるシナトラアプリ
class App < Sinatra::Base
use Twitter::API
# other stuff…
end
# config.ru
# instead of URLMap…
map "/" do
run App
end
そのようなものになると信じています。