104 votes

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}

Pour 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.

245voto

Homer Jon Points 857

J'ai résolu ce problème en ajoutant .to_json et certains informations d'en-tête

@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'
             }.to_json,
    :headers => { 'Content-Type' => 'application/json' } )

13voto

Brian McNabb Points 51

L' :query_string_normalizer est également disponible en option, qui va remplacer la valeur par défaut normalisateur HashConversions.to_params(query)

query_string_normalizer: ->(query){query.to_json}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X