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.
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
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")
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/
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.
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.
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.
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.
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.
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
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 FilterPoscast
que devuelve un error con mensaje personalizado
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
- Sitio web oficial
- Como Netflix usa gRPC (Parte I y II)
- Sitio oficial
- Documentación
- Artículo sobre WebSockets en Vapor con repositorio asociado
Podeís poneros en contacto a través de mi perfil en LinkedIn