Servidor mock con hercule y drakov

0
1497

En este tutorial veremos cómo crear de forma rápida un servidor mock con drakov y además hacerlo mantenible separándolo en diferentes ficheros .apib y uniéndolos con hercule.

Es probable que tengamos que dar de forma rápida un servidor mock al equipo de front y para poder hacerlo e ir guardando todos los endpoints en ficheros separados usaremos drakov y hercule.

Índice de contenidos


1. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2.5 GHz Intel Core i7, 16GB DDR3)
  • Sistema Operativo: Mac OS Sierra 10.12.5
  • Node Package Manager (npm) v3.10.10
  • Drakov v1.0.4
  • Hercule v4.1.1
  • Postman v5.5.0


2. Instalación

Para este tutorial, he elegido hacer un ejemplo con un servidor mock de deportes. Todas las peticiones http las haremos con Postman.

Teniendo instalado npm, empezaremos por instalar drakov y hercule desde el terminal.

npm install drakov -g
npm install hercule -g

De esta manera ya podremos usar los comandos «drakov» y «hercule». Abriremos el terminal y cambiaremos a una carpeta en la que dejaremos todos los ficheros que veremos durante el tutorial y usaremos para ejecutar todos los comandos de drakov y hercule.


3. Servidor mock con el primer endpoint usando drakov

En primer lugar crearemos un endpoint que acepte una petición GET y devuelva una lista de deportes dentro de la propiedad «resultados». Definiremos los endpoints usando el formato API Blueprint.

listado_deportes.apib
## Listado de deportes [/tutorialHerculeDrakov/deporte]

### Listado de deportes [GET]

+ Response 200 (application/json)

    + Body

            {
              "resultados": [{
                "id": 1,
                "nombre": "CrossFit"
              }, {
                "id": 2,
                "nombre": "MTB"
              }, {
                "id": 3,
                "nombre": "Surf"
              }, {
                "id": 4,
                "nombre": "Esquí"
              }, {
                "id": 5,
                "nombre": "Pádel"
              }]
            }

Dejaremos este fichero en la carpeta que hemos creado para el tutorial y para comprobar que este fichero es correcto lanzaremos por primera vez el servidor mock desde el terminal únicamente con este endpoint.

drakov -f listado_deportes.apib

Lanzamos una petición GET desde postman sobre el puerto por defecto de drakov, el puerto 3000.

GET http://localhost:3000/tutorialHerculeDrakov/deporte/

Y obtendremos la respusta:

{
    "resultados": [
        {
            "id": 1,
            "nombre": "CrossFit"
        },
        {
            "id": 2,
            "nombre": "MTB"
        },
        {
            "id": 3,
            "nombre": "Surf"
        },
        {
            "id": 4,
            "nombre": "Esquí"
        },
        {
            "id": 5,
            "nombre": "Pádel"
        }
    ]
}

Una vez comprobado podemos parar el servidor mock en el terminal.


4. Unión de varios ficheros apib usando hercule

Empezaremos creando tres nuevos endpoint para tener un servidor con cuatro endpoints en total.

deporte_eliminar.apib
## Eliminar deporte [/tutorialHerculeDrakov/deporte/{id}]

### Eliminar deporte [DELETE]

+ Parameters

    + id: 1 (integer) - id del deporte

+ Response 200 (application/json)

    + Body

            {
              "delete": true
            }
deporte_editar.apib
## Editar deporte [/tutorialHerculeDrakov/deporte/{id}]

### Editar deporte [PUT]

+ Parameters

    + id: 1 (integer) - id del deporte

+ Request (application/json)

    + Body

            {
              "nombre": "CrossFit Games"
            }

    + Schema

            {
              "type": "object",
              "properties": {
                "nombre": {
                  "type": "string"
                }
              }
            }

+ Response 200 (application/json)

    + Body

            {
              "update": true
            }
deportes_.apib
## Detalle de deporte [/tutorialHerculeDrakov/deporte/{id}]

### Detalle de deporte [GET]

+ Parameters

    + id: 1 (integer) - id del deporte

+ Response 200 (application/json)

    + Body

            {
              "id": 1,
              "nombre": "CrossFit"
            }

Ahora que ya tenemos varios endpoints, los juntaremos en un mismo fichero usando hercule. A hercule le tendremos que pasar otro fichero en el que pondremos la ruta al fichero apib de cada endpoint.

api_deportes_hercule.apib
# API tutorial deportes

:[](listado_deportes.apib)

:[](deporte.apib)

:[](deporte_editar.apib)

:[](deporte_eliminar.apib)

Usaremos el fichero «api_deportes_hercule.apib» para generar la api completa con hercule, la api la generaremos en el fichero «api_deportes.apib» con el comando:

hercule "api_deportes_hercule.apib" --output "api_deportes.apib"

Vemos que el fichero destino «api_deportes.apib» es la composición de los demás ficheros. Volveremos a lanzar el comando drakov para tener el servidor con todos los endpoints.

Si añadimos al comando drakov, el argumento «–watch», el servidor estará comprobando continuamente el fichero «api_deportes.apib» y si este cambia, el servidor se refrescará automáticamente. Esto es útil para no tener que estar lanzando el servidor mock cada vez que cambiemos el archivo «api_deportes.apib».

drakov -f api_deportes.apib --watch

En este momento ya podremos hacer todas las peticiones contra el servidor mock y ver los resultados. Podemos lanzar las siguientes peticiones:

GET http://localhost:3000/tutorialHerculeDrakov/deporte/
GET http://localhost:3000/tutorialHerculeDrakov/deporte/1
DELETE http://localhost:3000/tutorialHerculeDrakov/deporte/2
PUT http://localhost:3000/tutorialHerculeDrakov/deporte/3
body:
{
	"nombre" : "Frontón"
}


5. Conclusiones

Hemos visto por encima el uso de drakov, pero el objetivo de este tutorial era ver cómo hacer mantenible el uso de drakov y no tener un fichero extenso con todos los endpoints. Con hercule podemos unir los diferentes ficheros de los endpoints facilmente y mantenerlos separados para no tener un solo fichero con la definición de la api completa.

Os dejo un enlace a todos los ficheros usados y el json con las peticiones realizadas en postman.

servidor_mock_hercule_drakov


6. Referencias

Un saludo.

Carlos.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad