Peticiones http en node red


Vamos a conocer las peticiones http en node red, cuales podemos usar y ver un ejemplo con peticiones y respuestas

oscar Escrito por oscar 30 August 2020 7098 0

Acerca del proyecto

En este proyecto vamos a conocer las peticiones básicas http que podemos trabajar en el entorno node red, esto con el fin de iniciar en el mundo del iot de forma fácil, ya que necesitamos crear un servidor y esta plataforma nos brinda la posibilidad de crear un flujo de trabajo de forma rápida y sin realizar programas extensos.

No nos vamos a extender en detalle de como crear un servidos ni de manipulación de los datos, solo vamos a crear las entradas http get, port, put y delete, con estas vamos a ver como recibir parámetros por url y por json, ademas vamos a ver como realizar una respuesta con una simple pagina html y respuesta en formato json.

La idea de este proyecto es conocer otra forma de como podemos recibir datos desde los dispositivos que creemos y de como procesarla, y eto lo hacemos con node res que no se necesita conocer de programación. Explicaremos el paso a paso de cada petición y de como usarla.

Conocimiento previo

Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.

Proyecto Descripción
http En este post conocerá las diferentes peticiones http que se pueden generar y su definición.
Node red entorno de trabajo En este post encontrara una explicación del uso de node red, ademas de los links en donde podrá realizar la instalación del programa en los diferentes sistemas operativos.
Nodos básicos en node red Definimos cada uno de los nodos básicos y los clasificamos esto es para que se de una idea del funcionamiento de cada uno de ellos.

Request (Petición)

Una petición consiste en los siguientes pasos:

  1. Un comando
  2. Header (opcionales)
  3. Contenido del cuerpo (opcional)

Response (Respuesta)

Una respuesta consiste de los siguientes pasos

  1. Un código de estado
  2. Headers (opcionales)
  3. Contenido del cuerpo (opcional)

Tipos de peticiones

Para este ejercicio tenemos las siguientes peticiones creadas, vamos a mostrar primero una tabla con los nodos que estamos usando y su caracteristica para que los tengan en cuenta, luego procedemos a realizar la exploracion de cada petición.[1]

get

Para crear la petición get y dar una respuesta json vamos a crear el siguiente flujo de nodos.

Perticiones get
Peticiones get

A continuación, tenemos los nodos que estamos usando en la petición http y su configuración.

Nodo Nombre Configuración
httpin http in

Method

get

URL

/sensor

template template

Name

Page

Property

msg.payload

Template

{ "sitio": "codigoelectronica.com" }

change
Leyenda
change

Name

Set Headers

Rules

  • [set: msg.headers] [to: (json):{}]
  • [set: msg.headers.content-type] [to: (string):{application/json}]
httpresponse http response No requiere con el nodo change (Set Headers) esta la respuesta

Este es el código json de la petición para que lo pueda copiar e importar al proyecto.

[{"id":"6515ba4c.015a24","type":"http in","z":"32e06554.dd8dfa","name":"","url":"/sensor","method":"get","upload":false,"swaggerDoc":"","x":110,"y":140,"wires":[["d1778a9e.cbccc8"]]},{"id":"d1778a9e.cbccc8","type":"template","z":"32e06554.dd8dfa","name":"page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{ \"sitio\": \"codigoelectronica.com\" }","x":290,"y":140,"wires":[["f5523a1.de306c8"]]},{"id":"f5523a1.de306c8","type":"change","z":"32e06554.dd8dfa","name":"Set Headers","rules":[{"t":"set","p":"headers","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"headers.content-type","pt":"msg","to":"application/json","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":140,"wires":[["19f60990.8fa936"]]},{"id":"19f60990.8fa936","type":"http response","z":"32e06554.dd8dfa","name":"","statusCode":"","headers":{},"x":650,"y":140,"wires":[]}]

En la petición get estamos usando el bloque de entrada http donde damos una url, a este nodo lo conectamos al nodo de template donde lo estamos creando la respuesta que queremos visualizar, en este paso podemos obtener la información que nos llega de la petición por medio de payload pero eso lo explico en el siguiente ejemplo. Ahora vamos a crear la respuesta, en este caso usaremos change el cual permite crear los headers de respuesta que en este caso va a ser una respuesta json y por ultimo lo conectamos con el nodo de salida http para que de la respuesta en la petición. Ingresamos en la siguiente url para ver el ejemplo: http://localhost:1880/sensor

Respuesta petición get
Respuesta petición get

Vamos a realizar una petición get a la cual le enviamos parámetros por url y retornamos en formato html. Vamos a crear el siguiente flijo.

Petición get con parámetros
Petición get con parámetros

A continuación, tenemos los nodos que estamos usando en la petición http y su configuración.

Nodo Nombre Configuración
httpin http in

Method

get

URL

/sensor-params

template template

Name

Page

Property

msg.payload

Template

<html>
    <head></head>
    <body>
        <h1>Nombre: {{payload.name}}</h1>
    </body>
</html>
httpresponse http response Los mensajes enviados a este nodo deben tener su origen en un nodo de entrada http

Este es el código json de la petición para que lo pueda copiar e importar al proyecto.

[{"id":"7e711b75.bca444","type":"template","z":"32e06554.dd8dfa","name":"page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n    <head></head>\n    <body>\n        <h1>Nombre: {{payload.name}}</h1>\n    </body>\n</html>","x":410,"y":320,"wires":[["bdef2a57.63b588"]]},{"id":"e80ea879.ab90b8","type":"http in","z":"32e06554.dd8dfa","name":"","url":"/sensor-params","method":"get","upload":false,"swaggerDoc":"","x":210,"y":320,"wires":[["7e711b75.bca444"]]},{"id":"bdef2a57.63b588","type":"http response","z":"32e06554.dd8dfa","name":"","statusCode":"","headers":{},"x":570,"y":320,"wires":[]}]

Para este ejemplo estamos realizando la misma configuración del paso anterior, solo que en el nodo de template vamos a obtener el valor de parámetro enviado por la url por medio del payload, y no estamos creando los headers, por defecto httpresponse da como salida una respuesta plana. Podemos probar con la siguiente url: http://localhost:1880/sensor-params?name=oscar

Respuesta petición get parámetros
Respuesta petición get parámetros

 

post

Para hacer una petición post cambiamos el metodo en el nodo http, además vamos a realizar la prueba con el programa postman, aunque puede usar cualquiera con que puedan llamar una url con este tipo de petición es suficiente.

En esta petición post enviamos parámetros y retornamos una respuesta json, observemos la siguiente imagen:

Petición post
Petición post

A continuación, tenemos los nodos que estamos usando en la petición http y su configuración.

Nodo Nombre Configuración
httpin http in

Method

post

URL

/sensor

template template

Name

Page

Property

msg.payload

Template

{ "Hello":"World","data":"{{payload.data}}","name":"{{payload.name}}"}

change change

Name

Set Headers

Rules

  • [set: msg.headers] [to: (json):{}]
  • [set: msg.headers.content-type] [to: (string):{application/json}]
httpresponse http response No requiere con el nodo change (Set Headers) esta la respuesta

Este es el código json de la petición para que lo pueda copiar e importar al proyecto.

[{"id":"dc7b8f4.1a92c7","type":"http in","z":"32e06554.dd8dfa","name":"","url":"/sensor","method":"post","upload":false,"swaggerDoc":"","x":170,"y":620,"wires":[["1a7de759.c45f79"]]},{"id":"1a7de759.c45f79","type":"template","z":"32e06554.dd8dfa","name":"page","field":"payload","fieldType":"msg","format":"json","syntax":"mustache","template":"{ \"Hello\":\"World\",\"data\":\"{{payload.data}}\",\"name\":\"{{payload.name}}\"}","output":"str","x":350,"y":620,"wires":[["ab093779.bbbcd8"]]},{"id":"ab093779.bbbcd8","type":"change","z":"32e06554.dd8dfa","name":"Set Headers","rules":[{"t":"set","p":"headers","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"headers.content-type","pt":"msg","to":"application/json","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":510,"y":620,"wires":[["651b8fa9.78f2a"]]},{"id":"651b8fa9.78f2a","type":"http response","z":"32e06554.dd8dfa","name":"","statusCode":"","headers":{},"x":670,"y":620,"wires":[]}]

En este ejemplo con el post en el nodo template vamos a crear la respuesta que mostraremos en formato json y en esta misma respuesta vamos a mostrar los valores de los parámetros que estamos obteniendo desde la petición para crear la respuesta, creamos los headers con el formato json y realizamos la petición por medio de postman como se observa en la siguiente imagen.

Respuesta petición post
Respuesta petición post

En la petición creamos el json con los parámetros que vamos a enviar.

{
    "name": "hola desde postman 2",
    "data":2
}

La respuesta que nos da podemos ver que a mostrado los parámetros que enviamos desde la petición.

{
    "Hello": "World",
    "data": "2",
    "name": "hola desde postman 2"
}

put y delete

Para el ejemplo de put y delete nos podemos guiar con post, ya que son parecidos en el flujo de bloques y en la forma de enviar los parámetros, en el nodo de http se configura el tipo de petición y se puede hacer el mismo ejemplo de post para probar.  

Petición put y delete
Petición put y delete

La respuesta que obtenemos es similar y en este tipo de peticiones también las probamos con postman.

Respuesta petición put y delete
Respuesta petición put y delete

Referencias

[1] steves-internet http://www.steves-internet-guide.com/http-basics/, Consultado Agosto 2020


Comentario

Debe aceptar antes de enviar