it-swarm.com.de

POST JSON to API mit Rails und HTTParty

Ich möchte, dass ein Benutzer in meiner Ruby on Rails on ====) ein Ticket an mein externes Ticket-Management-System squishlist.com senden kann Eine API und Anweisungen lauten wie folgt: Sie müssen sich authentifizieren und einen Token erhalten und dann das Ticket mit dem Token übermitteln.

# 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}

Zu Testzwecken habe ich einen Controller, eine Route und eine Ansicht (Seite) zum Testen erstellt. Auf meinem Controller habe ich Folgendes

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='[email protected]+'&user_key='[email protected]_key+'&api_key='[email protected]_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='[email protected]+'&token='[email protected]+'&method=squish.issue.submit&prj='[email protected]

        #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

Und dann habe ich eine Seite, die ich gehe, um das Ergebnis der Controller-Aktionen zu sehen, und sie hat den folgenden Code.

<p><%= @result %></p>

Ich weiß, dass es im Allgemeinen aufgrund der Antworten funktioniert, die ich auf dem Weg erhalten habe. Mein json unterscheidet sich vom Beispiel durch Felder, die ich in squishlist definiert habe. Kann mir jemand in dieser Angelegenheit weiterhelfen?

Ich schätze, das eigentliche Problem ist, dass ich nicht wirklich sehen kann, wie der JSON aussieht und ob er sogar fast zusammenpasst. Ich weiß wirklich nicht viel über Json. Sollte ich etwas verwenden, das einfach sein könnte. Sollte ich Ajax verwenden, um dies einzureichen. Jede Hilfe wird sehr geschätzt. Ich liebe die Community hier.

103
Homer Jon

Ich habe das gelöst, indem ich .to_json und ein paar Überschriften

@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' } )
243
Homer Jon

Die Option :query_string_normalizer Ist ebenfalls verfügbar, wodurch der Standardnormalisierer HashConversions.to_params(query) außer Kraft gesetzt wird.

query_string_normalizer: ->(query){query.to_json}
13
Brian McNabb