我有一个我试图使用的Ruby Gem,它将URL作为参数。我使用Sinatra为此服务创建Web服务。我不知道Sinatra和Ruby .. 所以,如果我做了:
curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://localhost:4567?http://www.myhostserver.com/mattdaemon
我希望我的Ruby应用程序解析http://www.myhostserver.com/mattdaemon并将其传递给我的Ruby Gem。
这是我的代码:
require 'sinatra'
require 'rubygems'
require 'myrubygem'
require 'rack'
require 'rack/server'
get '/:id' do
# widget = myGem::Profile.get_profile("#{env['QUERY_STRING']}")
# widget = myGem::Profile.get_profile("#{params[:id]}")
set :my_url, "#{request.env['QUERY_STRING']}"
widget = myGem::Profile.get_profile(":my_url]}")
return status 404 if widget.nil?
widget.to_json
end
注释掉了我的尝试..我总是得到404回复..我怎么会得到相关的错误信息,以了解发生了什么?
谢谢!
答案 0 :(得分:1)
在这一点上有点困惑
我猜主要是你需要了解url路径与参数和查询字符串之间的区别。
假设您有name
mattdaemon的参数value
。下一个假设是您使用GET而不是POST。
查询字符串
这就是你现在所拥有的。查询字符串是这样的:?param=value¶m2=value
代码示例
get "/" do
puts params[:name]
end
卷曲
curl myhostserver.com:4567?name=mattdaemon
params
为您解析查询字符串,以便您轻松访问这些值。
你在这里做的是使用查询字符串进行GET。
路线模式
Sinatra允许您像其中包含参数的URL一样构建REST。
get "/:name" do
puts params[:name]
end
get "/user/:name" do |name|
puts name
end
curl
curl myhostserver.com:4567/mattdaemon curl myhostserver.com:4567/user/mattdaemon
正如您所看到的,params
在这里也是最适合您的工作。
答案 1 :(得分:0)
好的,这:Sinatra and question mark帮助了我。 我做了:
get '/' do
string_to_add = request.query_string
widget = myGem::Profile.get_profile("#{string_to_add}")
return status 404 if widget.nil?
widget.to_json
end
拨打电话:
curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://myhostserver.com:4567?mattdaemon
奇怪的是我传递的网址 - 没有参数名称..如果我使用http://myhostserver.com:4567/mattdaemon(即作为资源)不起作用。在这一点上有点困惑,但是,它确实有效。