我一直在阅读,发现这个micro-framework called Grape是 ruby 。我目前正在使用Sinatra来处理Web界面,但我也想实现Grape来处理应用程序的API方面。我找不到关于此主题的任何有用建议。葡萄的文档说:“Grape是用于Ruby的类似REST的API微框架。它旨在在Rack上运行,或者通过提供简单的DSL轻松开发RESTful API来补充现有的Web应用程序框架(如Rails和Sinatra)。”因此,听起来应该有一种将两者结合起来的官方方法对吗?该应用程序还将在Heroku上运行。
最佳答案
您要查找的短语是:
那种事Grape,Sinatra和Rails都是Rack应用程序。这意味着您可以构建自己的Grape应用程序,Sinatra应用程序和Rails应用程序,然后可以使用Rack运行它们,因为它们都是兼容Rack的,因为它们共享接口(interface)。
实际上,这意味着您要编写应用程序,然后将其放入机架文件中以运行它们。一个使用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应用程序内运行其他应用程序,并且我看到Grape也提供了mount
关键字。有很多可用的方法,起初可能会有些困惑,但是只需尝试一下,看看它们的作用以及您最喜欢的是什么。它的很大一部分是偏爱,所以不要害怕去做对的事情。 Ruby比计算机更适合人类:)编辑:带有Grape应用程序“内部”的Sinatra应用程序
class App < Sinatra::Base
use Twitter::API
# other stuff…
end
# config.ru
# instead of URLMap…
map "/" do
run App
end
我相信会是那样。
关于ruby - Sinatra和Grape API在一起吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15102293/