Hola gente del futuro.
En las primeras etapas de desarrollo, algunos desarrolladores de API se basarán únicamente en una colección de Postman para que sea una fuente suficiente de documentación para su API.
Este puede ser el caso, pero tan pronto como la API esté siendo utilizada por más personas que el único desarrollador con su única colección, esto se convierte rápidamente en una pesadilla.
Si tu API es pública, y no tiene documentación, nadie usará tu API en absoluto, lo que podría afectar drásticamente los éxitos de su empresa.
La integración con servicios a través de una API es un factor muy importante para muchas empresas en estos días, desde startups hasta grandes corporaciones, así que no te tomes la molestia de crear algo sorprendente solo para que lo ignoren por completo debido a la falta de documentación.
Te mostraré una forma de documentar tu API, ¿estás preparado?
Usa la sintaxis de API Blueprint:
1FORMAT: 1A 2 3# Encuestas 4 5Encuestas es una API que permite a los clientes ver encuestas y votar en ellas. 6 7# Group Preguntas 8 9## Colección de preguntas [/preguntas] 10 11### Lista todas las preguntas [GET] 12 13+ Response 200 (application/json) 14 15 [ 16 { 17 "pregunta": "¿Cuál es tu lenguaje de programación favorito?", 18 "publicado_en": "2014-11-11T08:40:51.620Z", 19 "url": "/preguntas/1", 20 "opciones": [ 21 { 22 "opcion": "Go", 23 "url": "/preguntas/1/opciones/1", 24 "votos": 2048 25 }, { 26 "opcion": "PHP", 27 "url": "/preguntas/1/opciones/2", 28 "votos": 1024 29 }, { 30 "opcion": "Python", 31 "url": "/preguntas/1/opciones/3", 32 "votos": 512 33 }, { 34 "opcion": "Ruby", 35 "url": "/preguntas/1/opciones/4", 36 "votos": 256 37 } 38 ] 39 } 40 ]
El primer paso es especificar el formato, en nuestro ejemplo es 1A. es decir, la versión de API Blueprint.
1FORMAT: 1A
En el primer encabezado colocamos el nombre de nuestra API, "Encuestas", los encabezados o títulos inician con uno o más numerales (#) seguidos de un espacio en blanco.
1# Encuestas
El nivel del encabezado está dado por el número de numerales (#), es decir, un encabezado de nivel 2 tiene dos ("## ") al inicio.
Las líneas en general son considerados párrafos, es importante agregar una descripción de la API justo después del título.
Luego usamos la palabra clave "Group" para crear un grupo de recursos relacionados.
1# Group Preguntas
Dentro del grupo "Encuestas" tenemos un recurso llamado "preguntas". El título especifica la URI usada para acceder al recurso, al final, dentro de paréntesis cuadrados.
1## Colección de preguntas [/preguntas]
API Blueprint te permite especificar cada acción que puedes realizar en un recurso. Una acción es especificado como un subtítulo dentro del recurso con el nombre de la acción seguido por el método HTTP.
1### Lista todas las preguntas [GET]
Una acción debe incluir al menos una respuesta del servidor que debe incluir un código de estado y puede contener un cuerpo. Una respuesta se define como un elemento de lista dentro de una acción. Las listas son creadas por elementos de lista precedentes con un +, * o -.
1+ Response 200 (application/json) 2 3 [ 4 { 5 "pregunta": "¿Cuál es tu lenguaje de programación favorito?", 6 "publicado_en": "2014-11-11T08:40:51.620Z", 7 "url": "/preguntas/1", 8 "opciones": [ 9 { 10 "opcion": "Go", 11 "url": "/preguntas/1/opciones/1", 12 "votos": 2048 13 }, { 14 "opcion": "PHP", 15 "url": "/preguntas/1/opciones/2", 16 "votos": 1024 17 }, { 18 "opcion": "Python", 19 "url": "/preguntas/1/opciones/3", 20 "votos": 512 21 }, { 22 "opcion": "Ruby", 23 "url": "/preguntas/1/opciones/4", 24 "votos": 256 25 } 26 ] 27 } 28 ]
En nuestro ejemplo retornamos el código de estado 200 junto con un cuerpo JSON.
Te invito a leer la documentación de API Blueprint para que veas todas las posibilidades disponibles, para este ejemplo no agregaremos más cosas.
Aunque el archivo es legible, en cierto modo, a medida que vaya creciendo, puede resultar un poco difícil de comprender; vamos a crear un bonito HTML+CSS+JS para leer nuestra documentación cómodamente.
No, no tendremos que crear HTML a mano, usaremos Aglio, una herramienta de NodeJS que toma nuestro archivo ".apib" y lo transforma en una página web.
Para instalar Aglio, necesitamos tener NodeJS en nuestro sistema, luego ejecutamos el comando:
1npm install -g aglio
Ahora ya podemos usar el comando aglio
, le indicamos el nombre de nuestro archivo ".apib" con la bandera "-i" y el nombre del archivo donde se escribirá el HTML resultante con la bandera "-o":
1aglio -i api_documentation.apib -o index.html
Al abrir index.html en nuestro navegador web veremos algo como esto:
En la web generada podemos expandir y contraer el cuerpo de la respuesta (Response) con el enlace show/hide.
Si no queremos el archivo HTML, podemos crear un servidor web que esté escuchando los cambios de nuestro archivo ".apib":
1aglio -i api_documentation.apib --server
El comando arroja un mensaje similar a este:
1Server started on http://127.0.0.1:3000/ 2Rendering doc.apib 3Socket connected
Ahora cada vez que cambiemos nuestro archivo ".apib" tan sólo tendremos que ir al navegador a ver los cambios en http://127.0.0.1:3000
.
Eso es todo por ahora futuro documentador de APIs, nos leemos en el siguiente artículo.