【发布时间】: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。
【问题讨论】:
有没有办法在 Sinatra 上处理 GET 请求并在同一服务器上使用不同的主体发出 PATCH 请求?用户发出请求GET /clean_beautiful_api,服务器将其重定向到PATCH /dirty/clogged_api_url_1?crap=2 "{request_body: 1}"?
我想在不影响功能的情况下清理遗留 API。
【问题讨论】:
如果我理解正确,最简单的方法是将用于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。
【讨论】: