加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

红宝石 – 从Sinatra内调用Sinatra

发布时间:2020-12-16 20:02:40 所属栏目:百科 来源:网络整理
导读:我有一个基于Sinatra的REST服务应用程序,我想从一个路由中调用其中一个资源,从另一个路由中有效地组成一个资源.例如. get '/someresource' do otherresource = get '/otherresource' # do something with otherresource,return a new resourceendget '/other
我有一个基于Sinatra的REST服务应用程序,我想从一个路由中调用其中一个资源,从另一个路由中有效地组成一个资源.例如.
get '/someresource' do
  otherresource = get '/otherresource'
  # do something with otherresource,return a new resource
end

get '/otherresource' do
  # etc.
end

重定向将不起作用,因为我需要对第二个资源进行一些处理,并从中创建一个新的资源.显然我可以a)使用RestClient或其他一些客户端框架,或者b)结构化我的代码,所以其他资源的所有逻辑都是一个方法,只是调用它,但是,如果我可以只是重新使用我们的资源从Sinatra使用他们的DSL.

解决方法

我能够通过快速肮脏的机架请求并直接调用Sinatra(机架应用程序)应用程序来骇客.它不漂亮,但它的作品.请注意,将生成此资源的代码提取为辅助方法可能会更好,而不是像这样做.但是这是可能的,而且可能会比这更好,更干净的做法.
#!/usr/bin/env ruby
require 'rubygems'
require 'stringio'
require 'sinatra'

get '/someresource' do
  resource = self.call(
    'REQUEST_METHOD' => 'GET','PATH_INFO' => '/otherresource','rack.input' => StringIO.new
  )[2].join('')

  resource.upcase
end

get '/otherresource' do
  "test"
end

如果您想了解更多关于幕后发生的事情,我已经写了几篇关于Rack基本知识的文章.有What is Rack?和Using Rack.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读