Configurando Scalar no Spring Boot
Se você ja desenvolveu uma API em alguma linguagem de programação, sabe que uma parte triste é documentar cada endpoint. Geralmente, desenvolvedores Java usam ferramentas como Javadoc para documentar a nivel de classe, outros documentam em markdown ou asciidoc a nivel de arquitetura. Porem muitos de nós, usam ferramentas iterativas como Swagger para documentar.
Porque usar Scalar (ou qualquer ferramenta iterativa)?
As ferramentas baseadas no OpenAPI, permite que, alem de documentar facilmente com annotations Java, nós possamos testar elas iterativamente sem ferramentas externas como Postman ou Insomnia.
Abaixo, segue as configurações que precisamos (segundo a doc da propria equipe do Scalar):
Configurando o Scalar
-
Primeiro, precisamos importar o modulo do scalar correspondente a nossa necessidade. Especificamente para o Spring, o scalar tem uma dependencia agnostica chamada
scalar-core, que funciona tanto no Spring MVC quanto no WebFlux (modulo de programação reativa do Spring).<dependency> <groupId>com.scalar.maven</groupId> <artifactId>scalar-webmvc</artifactId> <version>0.5.50</version> </dependency> -
Em seguida, vamos adicionar a dependencia do SpringDoc, ela que de fato permite que o Scalar leia nosso schema/contrato de api e a exiba na interface do Scalar
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>3.0.0</version> </dependency> -
Apos isso, vamos adicionar algumas informações no nosso arquivo de configuração. Aqui eu estou usando um
application.ymlmas você pode usarapplication.propertiesque funciona igual:scalar: enabled: true url: v3/api-docs page: Forunhub challenge slug: v1 page-title: "Forunhub API" springdoc: paths-to-exclude: /scalar/**`` -
Por fim, precisamos anotar nossas classes controller com as informações que devem ser exibidas no Scalar, semelhante ao que fariamos no Swagger. Anotações uteis:
Descrição Campos Exemplos Declara informações sobre uma controller especifica e agrupa suas ações - name = “nome do grupo, que aparece na tela”
- description = “descrição do grupo de endpoints/ações”@Tag(name = “Topico”, description = “Gerenciamento de perguntas e respostas.”) Descreve a operação que aquele endpoint especifico executa - summary = “resumo do que vai ser feito”
- description = “descrição extensa da operação”@Operation(summary = “Busca tópico por ID”, description = “Recebe um id de um topico existente e e retorna detalhes de um tópico específico do fórum conteudo informações do titulo, mensagem, status, curso e autor”) Seta as respostas possiveis daquele endpoint - responseCode = o codigo HTTP equivalente. Precisa ser setado manualmente
- description = descrição da resposta@ApiResponse(responseCode = "200", description = "Dados retornados com sucesso")
Espero que tenha sido util!
(END)