Я читал и нашел эту микро-структуру Grape для рубина. В настоящее время я использую Sinatra для обработки веб-интерфейса, но я также хотел бы реализовать Grape для обработки аспекта API приложение. Я не могу найти полезных предложений по этой теме. В документации по grape говорится: «Grape - это REST-подобная микросхема API для Ruby. Она предназначена для работы в Rack или дополняет существующие инфраструктуры веб-приложений, такие как Rails и Sinatra, предоставляя простой DSL для простой разработки RESTful API». Похоже, должен быть официальный способ их объединения, верно? Это приложение также будет работать на Heroku.
Sinatra и Grape API вместе?
Ответы (1)
Вам нужны следующие фразы:
- несколько стоечных приложений
- промежуточное ПО для стойки
- сопоставление URL-адресов стойки sinatra
Такие вещи. Grape, Sinatra и Rails - это приложения Rack. Это означает, что вы можете создать свое приложение Grape, приложение Sinatra и приложение Rails, а затем вы можете использовать Rack для их запуска, поскольку все они совместимы с Rack, потому что они имеют общий интерфейс.
На практике это означает, что вы пишете приложения, а затем помещаете их в файл rackup для их запуска. Краткий пример использования двух приложений Sinatra (но это может быть любое количество любых приложений для стойки):
# 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)
Если вы хотите добавить пример Twitter API из Grape README:
# 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)
Надеюсь, этого достаточно, чтобы вы начали. Если вы знаете, где искать, можно найти множество примеров. Вы также можете запускать другие приложения внутри приложения Sinatra, используя use
(см. http://www.sinatrarb.com/intro#Rack%20Middleware), и я вижу, что Grape также предлагает ключевое слово mount
. Доступно множество способов, которые поначалу могут немного сбивать с толку, но просто попробуйте их и посмотрите, что они делают и что вам больше всего нравится. По большей части это предпочтения, поэтому не бойтесь делать то, что кажется правильным. Ruby для человека больше, чем компьютер :)
Изменить: приложение Sinatra с приложением Grape "внутри"
class App < Sinatra::Base
use Twitter::API
# other stuff…
end
# config.ru
# instead of URLMap…
map "/" do
run App
end
Я верю, что будет что-то в этом роде.