/Vapor-gRPC

Uso del protocolo gRPC con el servidor Vapor

Primary LanguageSwift

Uso de gRPC con el servidor Vapor

Repositorio con el proyecto de ejemplo para la charla encuadrada en la UI Talks de Globant sobre el protocolo de comunicación gRPC con el servidor Vapor.

Como ejemplo vamos a desarrollar un servicio que devuelve una lista de podcasts almacenados en una base de datos Mongodb que hemos extraído de las herramientas de marketing de Apple.

Requisitos

Necesitamos tener instalado en nuestro equipo el compilador de Protocol Buffer y el plug-in para poder generar código en lenguage Swift.

Para ello usaremos el gestor de paquetes para macOS Homebrew.

Ahora vamos a instalar el compilador

brew install swift-protobuf

Para comprobar que el paquete se ha instalado correctamente ejecutamos la siguiente instrucción en la Terminal

protoc --version

Y por último instalamos el plug-in para generar código Swift

brew install grpc-swift

Añadiendo soporte gRPC al servidor Vapor

Abrimos el archivo de definición de paquete de nuestro proyecto Package.swift y añadimos las siguientes dos líneas en sus secciones correspondientes

.package(url: "https://github.com/grpc/grpc-swift.git", from: "1.0.0")
.product(name: "GRPC", package: "grpc-swift")

Generar código Swift a partir del archivo de definción Proto

Abrimos una terminal en nuestro equipo y nos situamos en la carpeta raiz de nuestro proyecto Vapor y ejecutamos el siguiente comando.

protoc --swift_out=Sources/App/Models/ --grpc-swift_out=Sources/App/Controllers/ podcasts.proto

Lo que estamos indicando es que queremos generar los modelos de datos en la carpeta Sources/App/Models/ y los servicios en la ruta Sources/App/Controllers/

Instalando Mongodb sobre Docker

Docker

La instancia de la base de datos NoSQL Mongodb la tendremos disponible con una imagen Docker, así que lo primero que tenemos que hacer es instalar la versión Desktop para macOS de Docker que se puede conseguir desde su página web.

Mongodb

Una vez instalado el cliente pasamos a instalar la imagen de Mongodb, así que abrimos un Terminal y ejecutamos el comando indicando abajo

docker run --name mongodb -d mongo

Y listo, ahora podemos arrancar la instanacia de Mongodb desde el cliente Docker cuando lo necesitemos.

Cargando los datos necesarias para la prueba

En la carpeta ... del respositorio podéis encontrar tres archivos JSON con lo que poblaremos nuestra base de datos. Para ello usaremos la herramienta Compass, un entorno gráfico para la gestión de instancias MongoDB.

Crear la base de datos

Lo primero que necesitamos es crear una nueva base de datos MongoDB, así que inicamos Compass y nos conectamos a nuestra instancia de MongoDB que tengo instalada en Docker. La cadena de conexión es

mongodb://localhost:27017

Tras conectarnos seleccionamos la pestaña Databases y pulsamos en el botón Create Database

En la ventana modal que se nos abre rellenamos el formulario con los siguientes datos

  • Database Name: podcasts
  • Collection Name: PodcastCollection

Ahora pulsamos en el botón Create Database. Ya tenemos lista nuestra base de datos.

Cargando los datos

Podeís seguir todos los pasos necesarios en el vídeo incluido en la carpeta MongoDB HowTo Video

Buscamos nuestra base de datos en la lista de bases de datos disponibles y pulsamos sobre su nombre, lo que nos llevará a la pantalla donde veremos las colección disponibles para esta base de datos, donde veremos la colección que acabamos de crear.

Pulsamos sobre el nombre de la colección (PodcastCollection) para ver los detalles y datos contenidos en esta colección.

Buscamos el botón con el título Add data y lo pulsamos. En el menú desplegable seleccionamos la opción Import file

En la ventana emergente que nos aparece seleccionamos el archivo JSON con los datos de podcasts y en Select Input Type File marcamos la opción JSON.

Los archivo de datos JSON los podéis encontrar en la carpeta MongoDB PreLoad Data

Pulsamos sobre el botón Import y listo, ya tenemos cargado nuestro primero archivo de datos de podcasts.

Arrancando Vapor

Nos teneos que situar en el directorio raiz de nuestro proyecto de ejemplo y desde la Terminal ejecutar el siguiente comando

vapor run

Si queremos levantar el servicio en alguno de los entornos predefinidos usando su archivo de variables asociado podemos hacerlo usando las siguientes líneas de comando

Para el entorno de pruebas y su archivo asociado .env.testing

vapor run --env testing

Entorno de desarrollo usando el archivo .env.development

vapor run --env development

Y el entorno de producción con las variables definidas en .env.production

vapor run --env production

Probando con Postman

Para configurar Postman podeís seguir el vídeo incluido en el repositorio dentro de la carpeta Postman How-To Video.

Lo que si que necesitáis es registraros en Postman para poder crear Workspaces.

Petición a FetchPodcasts

Petición a FilterPodcast

Petición a FilterPoscast que devuelve un error con mensaje personalizado

Enlaces de interés

Si queréis leer más acerca de gRPC, Protocol Buffers, Vapor y las herramientas que hemos usando durante la charla os animamos a visitar estos enlaces

gRPC

Protocol Buffers

Vapor

Herramientas

Contacto

Podeís poneros en contacto a través de mi perfil en LinkedIn