Comment puis-je mettre en œuvre cette requête POST à l'aide de HTTParty?

Je vais avoir de la difficulté à faire une requête POST à une API d'extrémité à l'aide de Ruby HTTParty de la bibliothèque. L'API je suis en interaction avec le Gittip API et leur point de terminaison requiert une authentification. J'ai réussi à faire un authentifié requête GET à l'aide HTTParty.

Vous pouvez le voir dans l'exemple de code:

user = "gratitude_test"
api_key = "5962b93a-5bf7-4cb6-ae6f-aa4114c5e4f2"
# I have included real credentials since the above is merely a test account.

HTTParty.get("https://www.gittip.com/#{user}/tips.json", 
             { :basic_auth => { :username => api_key } })

Que la requête fonctionne et renvoie les éléments suivants comme prévu:

[
  {
    "amount" => "1.00",
    "platform" => "gittip",
    "username" => "whit537"
  },
  {
    "amount" => "0.25",
    "platform" => "gittip",
    "username" => "JohnKellyFerguson"
  }
]

Cependant, j'ai été incapable de faire un POST de demande d'aide HTTParty. Le Gittip API décrit la préparation d'une requête POST à l'aide de curl comme suit:

curl https://www.gittip.com/foobar/tips.json \
  -u API_KEY: \
  -X POST \
  -d'[{"username":"bazbuz", "platform":"gittip", "amount": "1.00"}]' \
  -H"Content-Type: application/json"

J'ai essayé (sans succès) de structurer mon code à l'aide de HTTParty comme suit:

user = "gratitude_test"
api_key = "5962b93a-5bf7-4cb6-ae6f-aa4114c5e4f2"

HTTParty.post("https://www.gittip.com/#{user}/tips.json",
              { 
                :body => [ { "amount" => "0.25", "platform" => "gittip", "username" => "whit537" } ],
                :basic_auth => { :username => api_key },
                :headers => { 'Content-Type' => 'application/json' }
               })

Le premier argument est l'url et le deuxième argument est une des options de hachage. Lorsque j'exécute le code ci-dessus, j'obtiens l'erreur suivante:

NoMethodError: undefined method `bytesize' for [{"amount"=>"0.25", "platform"=>"gittip", "username"=>"whit537"}]:Array
  from /Users/John/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http/generic_request.rb:179:in `send_request_with_body'

J'ai essayé plusieurs autres combinaisons de structuration de l'appel d'API, mais ne peut pas comprendre comment le faire fonctionner. Voici un autre exemple, où je n'ai pas l'utilisateur d'un tableau comme une partie du corps et de convertir le contenu to_json.

user = "gratitude_test"
api_key = "5962b93a-5bf7-4cb6-ae6f-aa4114c5e4f2"

HTTParty.post("https://www.gittip.com/#{user}/tips.json",
          {
            :body => { "amount" => "0.25", "platform" => "gittip", "username" => "whit537" }.to_json,
            :basic_auth => { :username => api_key },
            :headers => { 'Content-Type' => 'application/json' }
           })

Qui renvoie les éléments suivants (erreur 500):

<html>
  <head>
    <title>500 Internal Server Error</title>
  </head>
  <body>\n        Internal server error, program!\n        <pre></pre>  
  </body>
</html>

Je ne suis pas vraiment familier avec curl, donc je ne suis pas sûr si je suis de traduire de façon incorrecte choses à HTTParty.

Toute aide serait appréciée. Merci.

OriginalL'auteur John Kelly Ferguson | 2013-10-19