ruby-on-rails - creating - rails 5.2 api
POST JSON a API utilizando Rails y HTTParty (2)
La opción :query_string_normalizer
también está disponible, que anulará el normalizador predeterminado HashConversions.to_params(query)
query_string_normalizer: ->(query){query.to_json}
Me gustaría que un usuario de mi aplicación Ruby on Rails pueda enviar un ticket a mi sistema externo de gestión de tickets, squishlist.com. Tienen una API e instrucciones de la siguiente manera. Necesita autenticarse y obtener un token y luego enviar el ticket con el token. 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}
Para fines de prueba, creé un controlador, ruta y vista (página) para probar. En mi controlador tengo lo siguiente
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
Y luego tengo una página a la que accedo para ver el resultado de las acciones de los controladores y tiene el siguiente código.
<p><%= @result %></p>
Sé que está funcionando en general debido a las respuestas que he recibido en el camino. My json es diferente del ejemplo debido a los campos que he definido en squishlist. ¿Alguien puede ayudarme en este tema?
Creo que el verdadero problema es que realmente no puedo ver cómo es el json y si está cerca de coincidir. Realmente no sé mucho sobre json. Debería estar usando algo que podría ser fácil. Debería estar usando ajax para enviar esto. Cualquier ayuda es muy apreciada. Amo a la comunidad aquí.
Lo resolví agregando .to_json
y alguna información de encabezado
@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'' } )