【问题标题】:Redirect Sinatra request changing method and body重定向 Sinatra 请求更改方法和正文
【发布时间】:2013-03-21 21:01:33
【问题描述】:

有没有办法在 Sinatra 上处理 GET 请求并在同一服务器上使用不同的主体发出 PATCH 请求?用户发出请求GET /clean_beautiful_api,服务器将其重定向到PATCH /dirty/clogged_api_url_1?crap=2 "{request_body: 1}"

我想在不影响功能的情况下清理遗留 API。

【问题讨论】:

    标签: rest redirect sinatra


    【解决方案1】:

    如果我理解正确,最简单的方法是将用于patch 的块提取到帮助器中:

    patch "/dirty/clogged_api_url_1"
      crap= params[:crap]
    end
    

    到:

    helpers do
      def patch_instead( params={} )
        # whatever you want to do in here
        crap= params[:crap]
      end
    end
    
    get "/clean_beautiful_api" do
      patch_instead( params.merge(request_body: 1) )
    end
    
    
    patch "/dirty/clogged_api_url_1"
      patch_instead( params )
    end
    

    或者你可以使用 lambda...

    Patch_instead = ->( params={} ) {
      # whatever you want to do in here
      crap= params[:crap]
    }
    
    get "/clean_beautiful_api" do
      Patch_instead.call( params.merge(request_body: 1) )
    end
    
    # you get the picture
    

    主要是将方法提取到其他地方,然后调用它。


    编辑:你也可以通过calltrigger another route internally using the Rack interface

    【讨论】:

    • 嗯,这种方法很明显,但我正在使用的代码非常复杂,提取此功能将导致我头上卸下一堆废话。所以我正在寻找更多将请求放入 Rack/Sinatra 的查询处理队列的方法。
    • @Anton 你看过triggering another route via call吗?
    • 您能否将其作为单独的答案发布以便我接受?此外,这看起来确实好多了,但会引发荒谬和不合逻辑的错误:stackoverflow.com/questions/15547001/…
    • @Anton 我已将其标记到此答案的末尾。
    • 那么下一个问题。
    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2015-10-26
    相关资源
    最近更新 更多