POST JSON API à l'aide de Rails et HTTParty
Je voudrais pour un utilisateur à l'intérieur de mon ruby on rails application pour être en mesure de présenter un billet pour mon externes billet de système de gestion, squishlist.com. Ils ont une api et des instructions comme suit. Vous devez vous authentifier et d'obtenir un jeton, puis soumettre le billet avec le jeton. De squishlist.
# get the token
https://api.squishlist.com/auth/?cfg=testcorp&user_key=privatekey&api_key=TEST-KEY-12345
=> {"token": "authtoken",
"expires": "2010-06-16 13:31:56"}
# and then the ticket with the token
https://api.squishlist.com/rest/?cfg=testcorp&token=authtoken&method=squish.issue.submit&prj=demo
POST data: {'issue_type': 1, 'subject': 'Hello, world.', 4: 'Open', 5: 10}
Des fins de test, j'ai créé un contrôleur, itinéraire et la vue (page) pour les tests. Sur mon contrôleur j'ai le texte suivant
require 'httparty'
require 'json'
class SubmitticketController < ApplicationController
def submit_a_ticket
@cfg = 'xxxsupport'
@user_key = '4787fsdbbfbfsdbhbfad5aba91129a3f1ed1b743321f7b'
@api_key = 'MrUser411'
@project = 'excelm-manoke'
@url_new_string = 'https://api.squishlist.com/auth/?cfg='+@cfg+'&user_key='+@user_key+'&api_key='+@api_key
# https://api.squishlist.com/auth/?cfg=xxxsupport&user_key=4787fsdbbfbfsdbhbfad5aba91129a3f1ed1b743321f7b&api_key=MrUser411 - this is what is created by @url_new_string
response = HTTParty.get(@url_new_string.to_str) #submit the string to get the token
@parsed_and_a_hash = JSON.parse(response)
@token = @parsed_and_a_hash["token"]
#make a new string with the token
@urlstring_to_post = 'https://api.squishlist.com/rest/?cfg='+@cfg+'&token='+@token+'&method=squish.issue.submit&prj='+@project
#submit and get a result
@result = HTTParty.post(@urlstring_to_post.to_str, :body => {:subject => 'This is the screen name', :issue_type => 'Application Problem', :status => 'Open', :priority => 'Normal', :description => 'This is the description for the problem'})
end
end
Et puis j'ai une page que je vais voir le résultat de l'contrôleurs actions et il a le code suivant.
<p><%= @result %></p>
Je sais qu'il travaille en général en raison de réponses que j'ai reçu, le long de la manière. Mon json est différente de l'exemple en raison de champs que j'ai défini dans squishlist. Quelqu'un peut-il m'aider sur ce problème?
Je pense que le réel problème est que je ne peux pas vraiment voir ce que le json ressemble et si elle est encore proche de match. Je ne sais vraiment pas beaucoup sur json. Dois-je utiliser quelque chose qui pourrait être facile. Dois-je utiliser ajax pour présenter ce. Toute aide est grandement appréciée. J'aime la communauté ici.
Vous devez vous connecter pour publier un commentaire.
J'ai résolu ce problème en ajoutant
.to_json
et quelques informations d'en-têteas_json
ne fonctionne pas. Il doit êtreto_json
:headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'}
. Remarque: l'en-tête ne doivent pas être converties en JSON, il est prévu d'en faire un hachageHTTPParty
, merci beaucoupLa
:query_string_normalizer
est également disponible en option, qui va remplacer la valeur par défaut normalisateurHashConversions.to_params(query)
request.options[:body]
mais envoyer la chaîne correcte. Ce devrait être la vraie réponse à la question.query_string_normalizer
doit être utilisé pour les chaînes de requête, de ne pas publier de données.ruby-doc.org
sont morts, la documentation est à httparty doc