Envío de TJSONObject como parámetro a un método remoto | Puro Delphi

Cursos, artículos, noticias y herramientas Delphi VCL (Visual Component Library) / FMX (Firemonkey)

Envío de TJSONObject como parámetro a un método remoto

La mayoría de enfoques que he encontrado en cuanto a documentación se refiere sobre la utilización de REST a Logo JSONObjecttravés de las bibliotecas que vienen de fábrica en Delphi, lo hacen para mostrar la manera de recibir un JSONValue –Ya sea JSONObject, JSONArray o cualquiera de los tipos soportados– devueltos a partir de un método que se encuentra normalmente en un servidor remoto, al cual se le ha hecho alguna petición.

Sin embargo este artículo no se enfocará en recibir un TJSONObject, sino que se enfocará en enviarlo por parámetro.

En otras palabras, resolveremos la respuesta a la pregunta… ¿Qué debo hacer si en el servidor 192.168.0.1 hay expuesto un método llamado “FueraDeLugar” en su clase TServerMethods, al que debo enviarle un TJugador como parámetro?

Bueno, últimamente he estado jugando algo de fútbol y por eso se me ha ocurrido semejante ejemplo, pero enfoquémonos en el asunto que aquí nos ataña.

A continuación listaré una pequeñísima referencia de los componentes de fábrica normalmente utilizados para estos menesteres, a los que le he llamado “el trio maravilla” para este artículo:

  1. TRESTClient: Se encarga de realizar la petición al servicio y de recibir su resultado, acorde a sus datos de cabecera y posibles datos del servidor proxy.
  2. TRESTRequest: Construye a partir de los parámetros necesarios y configuraciones la forma como se hará la petición al servidor.
  3. Y TRESTResponse: Contiene los datos retornado desde el servicio, como códigos de error, código de estado y el JSON en cuestión.

Ahora bien, volviendo al ejemplo del método en el servidor llamado FueraDeLugar –Que sirve para quien sabe qué cosa… lo dejo a la imaginación del lector– que recibe como parámetro un TJugador, hagamos dicha clase y la supuesta cabecera de dicho método:

TJugador

Cabecera del método FueraDeLugar

Ahora, para no darle más vueltas al asunto. Vamos al grano, enviemos a un TJugador a dicho método para luego recibir un dato boolean, tal y como lo indica la cabecera de dicho método:

  • Para este ejemplo bajemos de la paleta de componentes al “Trio maravilla” en el formulario (TRESTClient, TRESTRequest y TRESTResponse)

Debo confesarles que me desespera ver tantos componentes en un formulario para llamar a un solo método (No quiero ni imaginarme cuantos componentes habrán en ciertos apps que se conectan a muchos métodos de algun server), ya después publicaré un artículo para que descubramos juntos como encargarnos de dicho asunto.

  • Una vez este “trio maravilla” se encuentre en el formulario vamos a la propiedad BaseURL del TRESTClient y para este ejemplo escribimos la ruta en cuestión 192.168.0.1:8080/datasnap/rest/TServerMethods/FueraDeLugar.
  • Vamos al TRESTRequest:
    • En su propiedad Client enlazamos el TRESTClient.
    • En su propiedad Response el TRESTResponse que hemos colocado sobre el formulario.
    • A su propiedad Method le asignamos el valor rmPOST, para indicar que se utilizará el método POST cuando se realice la petición al servicio; De hecho en la documentación habla sobre la necesidad de usar este método cuando se desea enviar un parámetro de este tipo.
  • En el componente TRESTResponse no hacemos nada por ahora.

Hasta aquí terminamos lo referente al tema de configuración de estos componentes. Ahora para enviar el objeto colocamos por ejemplo… un botón en el formulario y escribimos el siguiente código en su evento OnClick, suponiendo que no hemos cambiado los nombres que Delphi asigna por defecto a los componentes que hemos colocado sobre el TForm:

  • Como podemos ver, en el código anterior entró a jugar un papel muy importante una variable llamada vJM (Variable JSON Marshal) de tipo TJSONMarshal (De la unidad Data.DBXJSONReflect), este objeto junto con el TJSONConverter (que se encuentra en la inicialización de la instancia), son los encargados de hacer por nosotros la conversión de un tipo TObject a un TJSONObject.
  • El resultado de dicha serialización sería algo como:

  • Y es a final de cuentas dicho JSON el que se enviaría al parámetro del método remoto.

Y ese es todo el ejercicio que atañe a este artículo, aunque si tienes dudas sobre donde fue a dar el valor de tipo boolean devuelto por la función, debo decirte que después de usar el método Execute del TRESTRequest el valor fue entregado al TRESTResponse en su propiedad Content como un String en formato TJSONValue.

Espero le sea de utilidad a alguien este artículo y les invito a comentar.

 


7 Comentarios

Escriba un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

  • RSS

  • Categorías

  • Nube de etiquetas

  • Usuario