Ich möchte, dass ein Benutzer in meiner Ruby on Rails-App ein Ticket an mein externes Ticketverwaltungssystem, squishlist.com, senden kann. Sie haben eine API und Anweisungen wie folgt. Sie müssen sich authentifizieren und ein Token erhalten und dann das Ticket mit dem Token senden. Aus der 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}
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='+@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
Und dann habe ich eine Seite, auf der ich das Ergebnis der Controller-Aktionen sehen kann, und sie enthält 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 aufgrund von Feldern, die ich in der Squishlist definiert habe. Kann mir jemand in dieser Angelegenheit helfen?
Ich denke, das eigentliche Problem ist, dass ich nicht wirklich sehen kann, wie der JSON aussieht und ob er auch nur annähernd übereinstimmt. 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.
quelle
:headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'}
. Hinweis: Der Header sollte nicht in JSON konvertiert werden, es wird erwartet, dass es sich um einen Hash handeltDie
:query_string_normalizer
Option ist ebenfalls verfügbar, wodurch der Standardnormalisierer überschrieben wirdHashConversions.to_params(query)
quelle
request.options[:body]
aber die richtige Zeichenfolge zu senden. Dies sollte die eigentliche Antwort auf die Frage sein.query_string_normalizer
sollte für Abfragezeichenfolgen verwendet werden, nicht für Post-Daten.ruby-doc.org
sind tot, die Dokumentation ist bei httparty doc