Introducción
Cinema es un proyecto ficticio que utiliza microservicios para el sistema de un cine. La lógica de Cinema está compuesta por 4 microservicios, todos escritos en Go, utilizando MongoDB para la gestión de datos y Docker para aislar y desplegar el ecosistema.
- Servicio Users: Brinda información de los usuarios.
- Servicio Movie: Brinda información de las películas como valoración, título, etc.
- Servicio Show Times: Brinda información sobre la programación de las películas.
- Servicio Booking: Brinda información sobre las reservaciones de los usuarios referente a la programación de las películas.
El caso de uso Cinema está basado en el proyecto escrito en Python por Umer Mansoor.
La estructura del proyecto está basada en el conocimiento obtenido del libro Web Development with Go escrito por Shiju Varghese, ISBN 978-1-4842-1053-6
Requerimientos
- Docker 1.12
- Docker Compose 1.8
Se tiene que agregar dominios virtuales en la máquina local para poder utilizar los puntos de entrada a las funcionalidades. Para el ejemplo se utiliza: movies.local, bookings.local, users.local y showtimes.local.
Los dominios virtuales han sido definidos en el fichero docker-compose.yml
y configurados en el fichero /etc/hosts
. Adicione la siguiente línea en el fichero /etc/hosts
:
127.0.0.1 movies.local bookings.local users.local showtimes.local
Código fuente
Usted puede descargar el código fuente utilizando este enlace.
Diagrama de servicios
Iniciar servicios
docker-compose up -d
Detener servicios
docker-compose stop
Incluir nuevos cambios
Si necesita modificar el código fuente usted puede desplegar los nuevos cambios escribiendo:
docker-compose build
Restaurar información en la base de datos.
Puede iniciar los microservicios utilizando la base de datos vacía, pero si prefiere, puede restaurar un juego de datos siguiendo los siguientes pasos:
Acceda al contenedor de MongoDB escribiendo:
docker exec -it cinema-db /bin/bash
Restaure la información escribiendo:
/backup/restore.sh
Salga del contenedor:
exit
Documentación
Servicio User
Este servicio brinda información sobre los usuarios de Cinema.
Rutas:
- GET - http://users.local/users : Obtiene todos los usuarios.
- POST - http://users.local/users : Crea un usuario
- DELETE - http://users.local/users/{id} : Elimina a un usuario por el id
Servicio Movie
Este es utilizado para gestionar la información de las películas. Cada película tiene el título, valoración en escala del 1-10, director, entre otros.
Rutas:
- GET - http://movies.local/movies : Obtiene todas las películas
- POST - http://movies.local/movies : Crea una película
- GET - http://movies.local/movies/{id} : Obtiene una película por el id
- DELETE - http://movies.local/movies/{id} : Elimina una película por el id
Servicio Showtimes
Este servicio brinda la programación de las películas en ciertas fechas.
Rutas:
- GET - http://showtimes.local/showtimes : Obtiene todas las programaciones
- POST - http://showtimes.local/showtimes : Crea una programación
- GET - http://showtimes.local/showtimes/{id} : Obtiene una programación por el id
- DELETE - http://showtimes.local/showtimes/{id} : Elimina una programación por el id
Servicio Booking
Este servicio brinda información sobre las reservaciones realizadas por los usuarios referente a las programaciones.
Rutas:
- GET - http://bookings.local/bookings : Obtiene todas las reservaciones
- POST - http://bookings.local/bookings : Crear una reservación.
Puertos expuestos
El puerto 27017
está expuesto para que sea consultado de manera local por el sistema Robomongo. El puerto 80
está expuesto para que sea consultado por dispositivos, navegadores webs u otros microservicios.
Pantallas
Iniciar servicios
Restaurar base de datos
Servicio - Obtener todos los usuarios (Postman)
Servicio - Obtener toas las películas (Postman)
Servicio - Obtener todos las programaciones (Postman)
Servicio - Obtener todos las reservaciones (Postman)
Base de datos, imagen completa (Robomongo)