Al crear un endpoint para un proceso de negocio, hay que especificar el tipo de datos que se enviarán en esta petición (Request payload type). La opción más común es JSON; permite especificar cómodamente todos los parámetros necesarios y pasar un modelo de datos o un array de objetos. Además, son posibles otras opciones, por ejemplo, XML o Multipart Form (si necesita enviar archivos).
Al mismo tiempo, es aceptable una situación en la que la estructura exacta no se conoce de antemano (o simplemente no importa). En este caso, una opción razonable es utilizar las consultas "raw".
Proceso de negocio para las solicitudes de raw
Imagínese una situación en la que esto pueda ser necesario. Digamos que el servicio que estamos desarrollando es sólo un enlace de conexión. Su tarea es recibir una solicitud del usuario, comprobar la autorización, guardar los registros, realizar la protección contra el spam y redirigir la solicitud si todo está en orden.
Una característica importante de las consultas de Raw es que no se utilizan parámetros de entrada al diseñar los procesos de negocio. En su lugar, se utiliza un bloque especial para obtener el cuerpo de la petición - Get Request Body. Supongamos que está interesado en información ampliada sobre la solicitud. En ese caso, el bloque Current Request Info es una opción adecuada, ya que no sólo devuelve el cuerpo de la solicitud, sino también parámetros adicionales y cabeceras de la solicitud.
En el caso de que estemos interesados en una cabecera específica de la petición, se puede obtener utilizando el bloque Get Request Header bloque. El ejemplo anterior lee la cabecera X-Real-IP que contiene la dirección IP de la solicitud. La IP resultante se pasa a una función que debe comprobar que la IP dada es válida y no está en la lista negra de direcciones prohibidas. Como resultado, el proceso será abortado con un mensaje de error apropiado o, si todo está en orden, se permitirá su ejecución.
La solicitud, recibida como Raw, se representa como una matriz de bytes. Para facilitar la percepción, se puede convertir en una cadena (To String block); en esta forma, la información se almacena en los registros.
En este caso, la petición en sí, sin transformaciones, puede ser redirigida posteriormente utilizando el HTTP Request bloque. En este ejemplo, se especifican el método de solicitud, su URL y el cuerpo de la solicitud (obtenido del Current Request Info ). El resultado del bloque HTTP Request se utiliza como resultado de todo el proceso de negocio.
La captura de pantalla muestra el proceso de negocio final. Tenga en cuenta que los bloques de funciones (FUNC Save request Log y FUNC IP Blacklist Check) son ejemplos y sólo existen en el ámbito de este proyecto.
Por lo tanto, el punto final puede utilizarse para trabajar con cualquier solicitud, independientemente de su contenido real. No es necesario conocer la petición exacta que debe enviarse a un servicio de terceros, e incluso si hay algunos cambios en ella (añadir un modelo, cambiar el nombre de los parámetros), se puede seguir utilizando el endpoint sin hacer cambios en el proyecto.