首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用机架式应用程序上的葡萄-Api gem获取绝对URL

使用机架式应用程序上的葡萄-Api gem获取绝对URL
EN

Stack Overflow用户
提问于 2014-08-27 23:45:38
回答 2查看 2.4K关注 0票数 2

我正在用grape gem做一个应用程序接口,在我的一个服务中,我想要检索完整的网址。例如,如果用户在以下位置请求:

代码语言:javascript
运行
复制
api.myapp.com/android/users.json

我希望能够检索到api.myapp.com/android/users.json或至少是/android/users.json

代码语言:javascript
运行
复制
class MyApp::API::Users < Grape::API

    resource :users do

        get do
            request.original_url
            # stuff ...
        end
    end
end

我尝试了我从Rails中了解到的东西,但现在它是Grape,它不起作用:

代码语言:javascript
运行
复制
  "error": "undefined method `original_url' for #<Grape::Request:0x00000005a78c08>"
EN

回答 2

Stack Overflow用户

发布于 2014-08-28 00:34:25

我想在我自己的API中做同样的事情(生成绝对URI),经过大量的研究,我最终放弃了。令人惊讶的是,我找不到一种很好的方法来获取您正在查找的信息--例如,您不能指定一个资源被“挂载”在特定的路径上,然后在稍后检索该信息。

在此期间,我最终做的是在每个请求开始时将基本URL (方案、主机名和端口)保存在全局变量中:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
link :self do
  RideYork::API::Resources::base_url +
    "/resources/agencies/#{represented.id}" if represented.id
end

这是一个可怕的黑客攻击,但我不知道有更好的解决方案。

票数 4
EN

Stack Overflow用户

发布于 2014-08-27 23:51:37

Grape::Request只是一个Rack::Request。看起来Rack::Request有一个您可以尝试的#url方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25531545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档