APIs com ASP.NET Core

32 - Swagger

Olá pessoal, nessa trigésima segunda aula do treinamento de Criando APIs com ASP.NET Core, vamos aprender a trabalhar com o Swagger.

O Swagger serve para documentarmos nossas APIs, especificando as rotas e também as entidades disponíveis. Também é possível realizar testes em nossas APIs, fazendo com que o Thunder Client não precise ser utilizado.

Podemos trabalhar com o Swagger em várias tecnologias, como por exemplo: Spring (Java e Kotlin), PHP, Python, etc...

Para efetuarmos o uso do Swagger é muito simples, siga os passos abaixo:

1º Instale o pacote do Swagger: dotnet add package Swashbuckle.AspNetCore.Swagger --version 6.8.1

2º Vamos implementar o arquivo Program.cs:

Pronto! Com essas duas etapas, podemos atualizar nosso servidor (CTRL + R) e acessar a rota, exemplo: localhost:5081/swagger.

Complemento

Muitos inscritos pedem materiais complementares sobre o Swagger, então darei algumas dicas abaixo de anotações utilizadas e também como implementar no arquivo de rotas:

  • [SwaggerOperation]
    • Purpose: Adiciona informações de resumo e descrição para cada operação no Swagger. Essas informações aparecem na documentação da API para que os desenvolvedores saibam o propósito de cada endpoint.
    • Properties:
      • Summary: Breve descrição da operação (ex: "Cadastrar uma nova pessoa").
      • Description: Descrição mais detalhada da operação (ex: "Esta rota permite cadastrar uma nova pessoa fornecendo as informações como nome, cidade e idade.")
  • [SwaggerResponse]
    • Purpose: Define as respostas possíveis para uma operação, incluindo o código de status HTTP e o tipo de conteúdo retornado. Ajuda a documentar os resultados possíveis de uma rota na documentação Swagger.
    • Properties:
      • HTTP Status Code: O código de status HTTP que será retornado (ex: 200, 201, 400, 404).
      • Response Type: O tipo de dado esperado na resposta (por exemplo, um objeto de tipo `Pessoa`, ou um tipo genérico como `string`).
  • [FromBody]
    • Purpose: Indica que o parâmetro de um método (como o modelo `Pessoa`) será passado no corpo da requisição HTTP (request body). É usado para parâmetros que precisam ser deserializados de JSON, por exemplo.
    • Example: No método `Cadastrar([FromBody] Pessoa p)`, o objeto `Pessoa` é passado no corpo da requisição.
  • [FromRoute]
    • Purpose: Indica que o valor do parâmetro será extraído da URL da rota (no caminho da URL). Este é o caso para parâmetros como um ID de recurso (ex: `codigo` na rota de alteração ou remoção).
    • Example: No método `Alterar(int codigo)`, o `codigo` é passado como parte da URL (ex: `/pessoa/{codigo}`).
  • [Required]
    • Purpose: Indica que o campo é obrigatório e não pode ser `null` ou vazio. Usado no modelo `Pessoa` para garantir que certos campos, como `Nome` e `Cidade`, sejam fornecidos.
    • Example: `[Required] public string Nome { get; set; }` no modelo `Pessoa` assegura que o nome não seja nulo ou vazio.
  • [StringLength]
    • Purpose: Restringe o comprimento de uma string a um valor máximo ou mínimo. Pode ser útil para garantir que campos como `Nome` não ultrapassem um certo número de caracteres.
    • Example: `[StringLength(100)] public string Nome { get; set; }` limita o campo `Nome` a no máximo 100 caracteres.
  • [Range]
    • Purpose: Define um intervalo válido de valores para um campo numérico, como a idade, que precisa estar entre 0 e 120.
    • Example: `[Range(0, 120)] public int Idade { get; set; }` garante que a idade esteja dentro do intervalo de 0 a 120.

Vamos ver na prática? Veja como fica nosso arquivo de controle com as data annotations acima:

Acompanhe a aula abaixo, onde ensino como implementar essa etapa do treinamento.

Torne-se membro! a partir de R$7,99 por mês.

Abaixo compartilho o vídeo da nossa aula no YouTube, bons estudos!