如何编写脚本来调用REST API?

时间:2013-06-21 17:27:38

标签: ruby-on-rails ruby

我想编写一个使用以下URL调用REST API的脚本:

http://localhost:3000/api/v1/user/xyz

如果我在浏览器中打开此URL,则会询问用户的电子邮件和密码。一旦我进行了身份验证,它就会返回一个带有用户ID的JSON响应。我不知道如何通过脚本进行身份验证。有人可以给我一个建议吗?

这就是我的开始:

require 'rubygems'
require 'net/http'
require 'json'

api_url = "http://localhost:3000/api/v1//user/xyz"

response = Net::HTTP.get_response(URI.parse(api_url))
data = JSON.parse(response.body)
fields = data.keys
puts fileds
puts data.keys

这是API的身份验证:

 before_filter :authorize, :except => [:keys]
private

      def authorize
        authenticate_or_request_with_http_basic do |username, password|
          user = User.find_by_email(username)

          if user && user.valid_password?(password)
            sign_in :user, user
          end
        end
      end

如何通过电子邮件和密码验证此API,以便我可以将“id”作为返回?

2 个答案:

答案 0 :(得分:1)

HTTP基本身份验证很容易添加到您的请求中,但我认为您不能使用get_response便捷方法。

请参阅:http://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html#label-Basic+Authentication

文档中的示例:

uri = URI('http://example.com/index.html?key=value')

req = Net::HTTP::Get.new(uri)
req.basic_auth 'user', 'pass' # username, password go here.

res = Net::HTTP.start(uri.hostname, uri.port) {|http|
  http.request(req)
}
puts res.body

答案 1 :(得分:1)

rest_client gem对我很有用。至于应该在文档中返回的API。您始终可以在IRB中尝试并查看响应包含的内容。