Blog
Para finalizar con nuestro curso, solo falta probar nuestra app para que interactue con nuestra API entonces para poner en marcha nuestra app lo que tenemos que hacer es ejecutar nuestro archivo levantar_servidor.py
, al ejecutar nuestro archivo veremos por consola lo siguiente:
λ python levantar_servidor.py * Serving Flask app "app" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Restarting with stat * Debugger is active! * Debugger PIN: 188-118-585 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Veremos dentro de la consola el servidor donde se ha puesto en marcha, en mi caso ha sido el puerto 5000 que es el puerto por defecto de Flask, ahora debemos iniciar el servidor de nuestra API porque para que nuestra aplicación funcione la el servidor donde corre la API también debe estar puesto en marcha, de lo contrario obtendríamos un error puesto que nuestra aplicación necesita de la API ya que al iniciarse se conecta a ella.
Para iniciar nuestra API primero debemos exportar la variable de entorno de flask llamada FLASK_APP
abrimos la consola y tipeamos lo siguiente:
En windows:
SET FLASK_APP=Blockchain_server.py
En linux:
export FLASK_APP=Blockchain_server.py
Una vez hecho esto, ya nuestra app estará lista para iniciarse con el comando flask run, pero yo quiero que se inicie especificamente en el puerto 8000, ya que mi aplicación se conecta a la API a través del puerto 8000:
λ flask run --port 8000 * Serving Flask app "Blockchain_server.py " * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
Ya esta puesto en marcha nuestro servidor donde se ejecuta nuestra API Blockchain, ahora; ya podemos ir a nuestra aplicación que se esta ejecutando en la dirección http://127.0.0.1:5000/
al acceder a dicha dirección veremos por primera vez la interfaz de nuestra app, la cual es la siguiente:
Como podemos ver nuestra interfaz cuenta con 3 fomularios cada uno de 2 botones y una navegación con una dos opciones, bastante sencillo pero que nos permitira realizar las peticiones a la API para lograr lo que queremos, el diseño que obtenemos es gracias a las clases de Bootstrap que agregamos en el código HTML en el capítulo pasado.
Por ahora, voy a reciclar un objeto y lo voy a hacer para el contenedor amarillo. Para este ejemplo reciclaré una lata de Coca-Cola con su respectivo código de barras y luego haré click en el botón registrar.
Como vez, al hacer click en registrar se nos notifica que hemos ganado 1 punto por reciclar y se borra lo que escribimos en el formulario y da la sensación de que no ocurre nada pero la verdad es que acabamos de reciclar el objeto en nuestro contenedor amarillo y nuestros datos quedan protegidos gracias a nuestro contenedor amarillo que funciona como una pequeña red blockchain y debemos minar para encontrar que es lo que hay dentro de dichos bloques y nuestra aplicación pueda mostrarlos.
Para esto basta con hacer click en el boton ver contenedor, el cual minará el contenedor para descifrar los que se encuentra dentro de él y seguidamente nuestra API nos redirige a la plantilla que renderiza los datos que contiene dicho contenedor, que para este caso es el amarillo y podremos ver en una ventana nueva lo siguiente:
Aquí tenemos el resultado, tambien podemos reciclar muchos objetos sin la necesidad de presionar ver contenedor para que se mine el contenedo cada vez que reciclemos uno. Para eso programamos dentro de nuestra API una lista llamada transacciones_no_verificadas
que se encuentra en el método constructor de cada una de nuestras clases (contenedores) y es aquí donde se guardarán todos los reciclajes que hagamos para cada contenedor para que luego sean desencriptados al momento de minarlos.
Probemos esto, voy a proceder a reciclar 2 objetos más en el contenedor amarillo y luego de reciclar esos dos objetos presionaré el botón ver contenedor:
Al hacer esto, probamos que esta funcionalidad esta correctamente programada y que no importa cuantos objetos se reciclen sin ser minados o desencriptados luego de compartirlos, nuestra API cubre perfectamente esta particularidad.
Ahora vamos a ir a nuestra navegación y harémos click en ver puntos, ya que si recuerdas cada vez que reciclabamos ganabamos un punto, verás que al ir a esta ruta deberíamos de tener un total de 3 puntos ya que hemos reciclado 3 objetos en el contenedor amarillo.
Muy bien, hasta ahora reciclamos en nuestro contenedor amarillo pero verás que si intentas reciclar en el contenedor azul o el verde podrás ver su contenido al igual como lo hicimos con el contenedor amarillo y también te serán otorgados los puntos, puedes probarlo por tu propia cuenta para verificar que todo este bien.
Ahora vamos a descargar un pequeño programa que suelo utilizar para trabajar con APIs de forma más comoda, este programa se llama Insomnia aunque también puedes utilizar Postman ambos son prácticamente lo mismo, pero en esta ocasión yo usaré Insomnia.
Una vez descargado vamos a configurar las peticiones que le haremos a nuestra API, serán un total de 3 conformadas por dos peticiones POST y dos peticiones GET.
Las peticiones POST tendrán la siguiente configuración, crearemos una llamada registrar_nodo8001
y para crear la petición hacemos click en el botón con el simbolo “+” y luego click en “New Request” y aparecera lo siguiente y debemos configurarlo así:
Una vez agregada la petición POST, vamos a agregar dos peticiones GET que son más faciles que la petición POST que acabamos de configurar, estas llevarán el nombre cadena_amarilla y transacciones_no_confirmadas_amarillas, hacemos click nuevamente en el boton con el simbolo “+” y click en “New request” por defecto aparecen las peticiones GET, solo coloquen el nombre y listo crean la petición.
Una vez agregadas todas las peticiones vamos a proceder a probar la funcionalidad que tenemos implementada en nuestra API, de que la información puede ser compartida si se registran los “compañeros”, en nuestra API creamos una variable globar llamada compañeros
y de lo que esta se encarga es de registrar los nodos para que los contenidos que sean compartidos desde un nodo puedan ser visibles desde otro nodo y esto lo podemos comprobar con ayuda de Insomnia o Postman.
Para ello lo primero que vamos a hacer es poner en marcha los nodos, entonces necesitaremos un total de 3 consolas, levantaremos nuestro servidor blockchain para el puerto 8000, 8001 y por último nuestra aplicación; lo que haría el total de 3 consolas.
Antes de continuar es importante destacar que debemos detener todos los servidores que tengamos en marcha e iniciar todo desde 0. Para no confundirte por los otros posts que hicimos anteriormente y así todo se reiniciará como si no hubiesemos escrito ningún post, entonces vamos a continuar:
Procedamos a levantar el primer nodo
:
λ SET FLASK_APP=Blockchain_server.py λ flask run --port 8000 * Serving Flask app "Blockchain_server.py " * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
Segundo nodo
:
λ SET FLASK_APP=Blockchain_server.py λ flask run --port 8001 * Serving Flask app "Blockchain_server.py " * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:8001/ (Press CTRL+C to quit)
Por último levantamos el servidor de nuestra app:
λ python levantar_servidor.py * Serving Flask app "app" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Restarting with stat * Debugger is active! * Debugger PIN: 188-118-585 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Probando nuestra API
Una vez puesto todo en marcha con nuestras 3 consolas, lo que haremos será registrar a los “compañeros” y para hacerlo nos dirigimos a Insomnia y en las peticiones POST, configuramos la ruta donde será enviada la petición y el objeto JSON tal cual como se ve en la imagen y solo hacemos click en “Send” puesto que ya tenemos todo configurado y deberiamos de ver los siguientes resultados:
Como podemos ver, nuestra API nos responde diciendonos que el registro del nodo compañero se ha hecho correctamente y para verificar si eso es cierto debemos ejecutar la petición GET que registramos anteriormente, la cual hará dicha petición a la ruta /cadena_amarilla
, entonces vamos a ejecutarlas y podremos ver la información que existe registrada en el contenedor amarillo:
Esta información la estamos viendo desde un usuario distinto, es decir; la información de los objetos reciclados fue agregado por un usuario “X” que se encuentra en el puerto 8000 y estamos preguntadole ¿qué existe dentro de ese contenedor? a un usuario “Y” que se encuentra en el puerto 8001 .
La API nos devuelve dicha información porque se esta compartiendo el contenido gracias a la variable compañeros y a la ruta que creamos en nuestra API para registrar un nodo el cual registra a un usuario nuevo al momento de unirse a la red blockchain, y es así como se comparte el contenido entre cada uno de los usuarios de la red, también al final podemos ver que la variable compañero mantiene registrado el nodo del usuario “Y”, lo cual nos indica que esta registrada como compañera.
Pero hasta ahora este registro debemos hacerlo manualmente, en una red blockchain lo lógico es que esto se haga automaticamente, pero esto es un tema que no tocaremos en este curso ya que es un poco más avanzado.
Por último voy a proceder a reciclar un objeto más, reciclaré una botella de soda pero no voy a hacer click en el boton ver contenedor ya que sabemos que este boton minará el contenedor y nos redirigira a la ruta que nos mostrará el contenido del contenedor, entonces lo que haré es solo agregarla, ya que me interesa preguntarle a la API si hay transacciones en cola para que sean minadas, esto lo sabremos con la última petición GET que nos falta por ejecutar, si la ejecutamos nos devolverá el siguiente resultado:
Ahora nuestra API nos devuelve que existe una transacción en cola, la cual será agregada al proximo bloque cuando se le solicite que debe minar el contenedor, es decir cuando hacemos click en el boton “Ver contenedor”
Por último, es importante destacar que hasta ahora solo probamos esto para el contenedor amarillo, pero si queremos que los otros dos contenedores se puedan compartir entre el usuario “X” y el usuario “Y” debemos repetir el proceso pero para cada contenedor remplazando en las peticiones que tenemos las rutas correspondientes para cada contenedor, lo único que debes hacer es cambiar el color.
Por ejemplo, en la petición POST si quiero registrar el contenedor azul debo cambiar la ruta http://127.0.0.1:8001/registrar_con_amarillo
por http://127.0.0.1:8001/registrar_con_azul
es decir solo debemos cambiar el color, ya que así fue como definimos las rutas en nuestra API.
➡ ¡Enhorabuena si has llegado hasta aquí! Continúa aprendiendo con nuestro Curso de Blockchain: