我正在用grape gem做一个应用程序接口,在我的一个服务中,我想要检索完整的网址。例如,如果用户在以下位置请求:
api.myapp.com/android/users.json
我希望能够检索到api.myapp.com/android/users.json
或至少是/android/users.json
class MyApp::API::Users < Grape::API
resource :users do
get do
request.original_url
# stuff ...
end
end
end
我尝试了我从Rails中了解到的东西,但现在它是Grape,它不起作用:
"error": "undefined method `original_url' for #<Grape::Request:0x00000005a78c08>"
发布于 2014-08-28 00:34:25
我想在我自己的API中做同样的事情(生成绝对URI),经过大量的研究,我最终放弃了。令人惊讶的是,我找不到一种很好的方法来获取您正在查找的信息--例如,您不能指定一个资源被“挂载”在特定的路径上,然后在稍后检索该信息。
在此期间,我最终做的是在每个请求开始时将基本URL (方案、主机名和端口)保存在全局变量中:
before do
# Save the base URL of the request, used by resources to build
# their canonical URI
Resources::base_url = request.base_url
end
然后,在每个资源表示者中,使用硬编码的路径信息“手动”组装URI:
link :self do
RideYork::API::Resources::base_url +
"/resources/agencies/#{represented.id}" if represented.id
end
这是一个可怕的黑客攻击,但我不知道有更好的解决方案。
发布于 2014-08-27 23:51:37
Grape::Request
只是一个Rack::Request
。看起来Rack::Request
有一个您可以尝试的#url
方法。
https://stackoverflow.com/questions/25531545
复制相似问题