Documentando minha API #1 — API Blueprint + Aglio

Allan Ramos
pagarme
Published in
2 min readMay 14, 2020

Mexer num projeto cuja API não tem documentação é um sofrimento… ter que vasculhar no código do projetos os endpoints e entender o que é possível fazer com cada um deles é um trabalho desnecessário, e seria resolvido de forma simples com uma bendita documentação :(.

Já diz a frase:

Uma API documentada é uma API feliz

Eis que chega a minha hora de fazer um projeto novo, e não posso cair na mesma mancada de deixar o código ser a fonte de entendimento da API.

Como especificação para a construção dessa documentação, optei pela API Blueprint. Criada pela Apiary(Oracle), tem a vantagem de ser escrita utilizando Markdown, facilitando a leitura.

Começando

Seguindo o padrão da API Blueprint, podemos escrever nossa documentação em Markdown ou com a extensão .apib. Optei pela segunda, já que é possível encontrar extensões para meu editor de texto.

O exemplo acima faz o seguinte:

  • Seta a url da api para http://api.meninogaimeiro.com.br;
  • Cria um grupo de rotas chamada games;
  • Cria um grupo de rotas Games /games. Nesse meu exemplo ficou repetido, mas poderia existir junto com essa rota o Platforms /games/platforms;
  • Crio uma request informando seus headers e seus atributos;
  • Crio uma response informando seus status codes e seus payloads

Para ver como essa documentação é renderizada usando o Apiary, clique aqui.

Gerando a documentação

A API Blueprint é apenas uma especificação, não uma tecnologia. Para gerar uma documentação em meu projeto Node, acabei por utilizar a engine Aglio, que será responsável por interpretar os arquivos nesse formato e renderizar a documentação formatada.

Para isso, faça:

  • npm install -g aglio
  • aglio -i api.apib — theme-template triple -s

Esse último comando lerá o arquivo api.apib, gerando um template de 3 colunas em um servidor.

Eis que o resultado será algo como mostrado na imagem abaixo:

Pronto! Com isso já posso dar continuidade na documentação da API :).

--

--