注: 「オブジェクト」はプレースホルダーの作業です。コントローラーが具体的に何をするかを言うべきではないと思います。
そのため、アプリ API を呼び出すには複数の方法があります。コマンド ラインでは次のように動作します。
curl -H 'Content-Type: application/xml' -d '<object><name>Test API object</name><password>password</password><description>This is a test object</description></object>' "http://acme.example.dev/objects.xml?api_key=1234"
上記のコマンドは、devlog に次の要求を生成します。
Processing ObjectsController#create to xml (for 127.0.0.1 at 2011-07-07 09:17:51) [POST]
Parameters: {"format"=>"xml", "action"=>"create", "api_key"=>"1234", "controller"=>"objects",
"object"=>{"name"=>"Test API object", "description"=>"This is a test object", "password"=>"[FILTERED]"}}
現在、API を使用してアクションのテストを作成し、API とコントローラーが機能することを確認しようとしています。これが私の現在の(壊れた)httpartyコマンドです:
response = post("create", :api_key => SharedTest.user_api_key, :xml => data, :format => "xml")
このコマンドは、テストログに次の要求を生成します。
Processing ObjectsController#create to xml (for 0.0.0.0 at 2011-07-07 09:37:35) [POST]
Parameters: {
"xml"=>"<object><name><![CDATA[first post]]></name>
<description><![CDATA[Things are not as they used to be]]></description>
<password><![CDATA[WHEE]]></password>
</object>",
"format"=>"xml",
"api_key"=>"the_hatter_wants_to_have_tea1",
"action"=>"create",
"controller"=>"objects
ご覧のとおり、コマンド ライン コマンドは実際には xml からオブジェクト ハッシュを生成しますが、httparty コマンドは最終的に xml にとどまり、ハッシュが必要なため create メソッドで問題が発生します。
アイデア/適切なドキュメントはありますか? 現在のドキュメントでは、投稿には URL と「オプション」が必要であり、利用可能なオプションについては決して言及されていません。
* *EDIT :
@Casper の提案に従って、私のメソッドは次のようになります。
def post_through_api_to_url(url, data, api_key = SharedTest.user_api_key)
response = post("create", {
:query => {
:api_key => api_key
},
:headers => {
"Content-Type" => "application/xml"
},
:body => data
})
ap @request.env["REQUEST_URI"]
assert_response :success
return response
end
残念ながら、API キーによる認証が失敗するため、assert_response は失敗します。request_uri の一番下を見ると、api_key が適切に設定されていません。次のように表示されます。
api_key%5D=the_hatter_wants_to_have_tea1"
ただし、%5D (右角かっこ) なしで等しい必要があります。