httparty
DESCRIPTION:
Makes http fun again!
FEATURES/PROBLEMS:
- Easy get, post, put, delete requests
- Basic http authentication
- Default request query string parameters (ie: for api keys that are needed on each request)
- Automatic parsing of JSON and XML into ruby hashes based on response content-type
SYNOPSIS:
The following is a simple example of wrapping Twitter‘s API for posting updates.
class Twitter
include HTTParty
base_uri 'twitter.com'
basic_auth 'username', 'password'
end
Twitter.post('/statuses/update.json', :query => {:status => "It's an HTTParty and everyone is invited!"})
That is really it! The object returned is a ruby hash that is decoded from Twitter‘s json response. JSON parsing is used because of the .json extension in the path of the request. You can also explicitly set a format (see the examples).
That works and all but what if you don‘t want to embed your username and password in the class? Below is an example to fix that:
class Twitter
include HTTParty
base_uri 'twitter.com'
def initialize(u, p)
@auth = {:username => u, :password => p}
end
def post(text)
options = { :query => {:status => text}, :basic_auth => @auth }
self.class.post('/statuses/update.json', options)
end
end
Twitter.new('username', 'password').post("It's an HTTParty and everyone is invited!")
REQUEST OPTIONS
Each of the HTTP method (get, post, put and delete) each take a hash of options. The following keys can be specified in the options:
headers: | A Hash of header key/value pairs |
query: | A Hash of query key/value pairs |
body: | The body of the request. If it‘s a Hash , it is converted into query-string format, otherwise it is sent as-is. |
basic_auth: | A Hash containing keys for :username and :password . |
no_follow: | Turns off automatic redirect following |
REQUIREMENTS:
- Active Support >= 2.1
INSTALL:
- sudo gem install httparty
以下是我个人的一些使用:
服务一(接受参数,返回结果):
首先在一个服务中定义一个Restful接口(在Controller中配置):
class ItemsController < ApplicationController
def get_item_by_name
@item = Item.find_by_name params[:avatar_name]
@item = Item.new unless @item
respond_to do |format|
format.html
format.json { render :json => @item}
end
end
end
在这里可能有些人疑问,为什么要加上@item = Item.new unless @item ,具体原因我也不清楚,只是当@item为空时,会出现类似下面的错误:
ActionView::MissingTemplate (Missing template items/get_item_by_name.erb in view path app/views)
详细看图:
虽然这个错误并不会影响到最终结果,但是错误就是错误,必须解决。
要被使用,还必须定义路由:
map.resources :items, :collection => {:get_item_by_name => :get}
接着确认一些该接口是否可用:http://website_one_url[:port]/items/get_item_by_name.json?avatar_name=头像1
如:http://localhost:3000/items/get_item_by_name.json?avatar_name=头像1
服务器二(POST参数,接受结果)
1、安装httparty插件
2、使用起来也很简单,只要在需要调用上面接口的Controller中简单设置一些就可以了:
require "httparty"
class PlayersControllers < ApplicationController
include HTTParty
base_uri "http://website_one_url:port"
def get_item_by_name avatar_name
get '/items/get_item_by_name.json', :query => {:avatar_name => avatar_name}
end
end
如果有@item不为空,那么返回来的值的格式应该是(json):
{"item"=>{"name"=>"电子优惠券", "price"=>50,"avatar_updated_at"=>nil}}
就是一个哈希,获取值必须像这样item["item"]["name"],不能item[:item][:name],单引号也不行。
参考:
http://httparty.rubyforge.org/rdoc/
http://httparty.rubyforge.org/
http://rdoc.info/projects/jnunemaker/httparty
http://github.com/jnunemaker/httparty/tree/master