我正在使用RocketPants宝石编写api客户端,并试图使用gem中包含的HTTParty来读取、创建、更新和销毁资源。
阅读和销毁工作正常,但我面临创建和更新资源的问题(在下面的例子中,事件)。
具体来说,我正在尝试以下几点:
def create_event params
post "events", :body => { :event => params }, :transformer => Event
end但是在API方面,它总是给我
Rendering error for ActionController::ParameterMissing:
key not found: event即使我把它包含在帖子请求中。
但是,当我尝试直接使用HTTParty时,如下所示:
HTTParty.post(
"http://localhost:3000/1/events",
:headers => {
'Authorization' => ActionController::HttpAuthentication::Token.encode_credentials("test token")
},
:body => {
:event => {
:name => "test"
}
}
)它可以工作,所以不可能是API不起作用。这种方法有两个缺点:我需要手动传递授权,结果不会被包装为事件。
我是否遗漏了任何适当发送邮件和发送请求的内容?我还查看了文档和规范,但在发布/放置时找不到任何东西(例如,请参阅spec.rb)。
这是我的完整代码:
require "ticket_gate/version"
require "rocket_pants"
module TicketGate
class Client < RocketPants::Client
# ---- Setup -----------------------------------
# ----------------------------------------------
version 1
base_uri 'http://localhost:3000'
def initialize access_token = nil
raise 'Please initialize with your api access token' unless access_token
@access_token = access_token
end
def base_request_options
{ :headers => { 'Authorization' => ActionController::HttpAuthentication::Token.encode_credentials(@access_token) } }
end
# ---- Events -----------------------------------
# -----------------------------------------------
class Event < APISmith::Smash
property :created_at
property :end_at
property :id
property :name
property :parent_id
property :start_at
property :ticket_limit
property :updated_at
end
def list_events
get "events", :transformer => Event
end
def get_event id
get "events/#{id}", :transformer => Event
end
#### HERE IS THE PROBLEM
def create_event params
post "events", :body => { :event => params }, :transformer => Event
end
#### HERE IS THE PROBLEM
def update_event id, params
put "events/#{id}", :body => { :event => params }, :transformer => Event
end
def destroy_event id
delete "events/#{id}", :transformer => Event
end
end
end发布于 2013-12-08 18:08:26
RocketPants内部对HTTP请求使用API Smith。
在API Smith文档中,我试图找出如何正确地传递POST参数,我猜这就是您应该做的:
post "events", :extra_body => { :event => params }, :transformer => Eventhttps://stackoverflow.com/questions/20456295
复制相似问题