9

私はいろいろ読んでいて、 Grape for ruby​​ と呼ばれるこのマイクロフレームワークを見つけました。私は現在Sinatraを使用して Web インターフェイスを処理していますが、Grape を実装してアプリの API の側面を処理したいと考えています。このトピックに関する有益な提案が見つかりません。グレープのドキュメントには、「グレープは Ruby 用の REST に似た API マイクロ フレームワークです。RESTful API を簡単に開発するためのシンプルな DSL を提供することで、Rack で実行するか、Rails や Sinatra などの既存の Web アプリケーション フレームワークを補完するように設計されています。」では、両方を組み合わせる公式の方法があるはずですよね?このアプリは Heroku でも実行されます。

4

1 に答える 1

21

探しているフレーズは次のとおりです。

  • 複数のラック アプリ
  • ラックミドルウェア
  • マッピング 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

そのようなものになると信じています。

于 2013-02-27T19:19:25.813 に答える