Boas Práticas em API REST: Explorando os Verbos HTTP com Exemplos em C#

Introdução

Olá, devs! APIs REST são a espinha dorsal da comunicação na web moderna.

Neste post, vamos explorar as melhores práticas para criar APIs RESTful e entender as diferenças entre os verbos HTTP com exemplos práticos em C#.

Vamos usar como exemplo uma estrutura de pedidos e itens, para tornar tudo mais prático e aplicável ao seu dia a dia de desenvolvimento.

Bora?

REST API

O que é uma API REST?

Uma API REST (Representational State Transfer) é um conjunto de regras que permite a comunicação entre sistemas usando o protocolo HTTP.

Elas são amplamente utilizadas devido à sua simplicidade e à capacidade de integrar diferentes sistemas de maneira eficiente.

Principais características de uma API RESTful:

Boas Práticas para APIs REST

Design de Endpoints:

Versionamento de API:

Autenticação e Autorização:

Tratamento de Erros:

Verbos HTTP e suas Utilizações

GET: Recuperação de dados

POST: Criação de novos recursos

PUT: Atualização de recursos existentes

PATCH: Atualização parcial de recursos

DELETE: Remoção de recursos

Exemplos de Código em C#

Vamos ver um exemplo simples e prático de como implementar Rest API em um projeto C#

[ApiController]
[Route("api/v1/pedidos")]
public class PedidosController : ControllerBase
{
    [HttpGet]
    public async Task<IActionResult> GetPedidos()
    {
        // Chamar a lógica de recuperação de pedidos
        return Ok(/* lista de pedidos */);
    }

    [HttpPost]
    public async Task<IActionResult> CreatePedido([FromBody] Pedido pedido)
    {
        // Chamar a lógica de criação de pedido
        return CreatedAtAction(nameof(GetPedidoById), new { id = pedido.Id }, pedido);
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetPedidoById(int id)
    {
        // Chamar a lógica de recuperação de pedido por ID
        return Ok(/* pedido */);
    }

    [HttpPut("{id}")]
    public async Task<IActionResult> UpdatePedido(int id, [FromBody] Pedido pedidoAtualizado)
    {
        if (id != pedidoAtualizado.Id)
        {
            return BadRequest();
        }

        // Chamar a lógica de atualização de pedido

        return NoContent();
    }
}
[ApiController]
[Route("api/v1/pedidos/{pedidoId}/itens")]
public class ItensController : ControllerBase
{
    [HttpGet]
    public async Task<IActionResult> GetItens(int pedidoId)
    {
        // Chamar a lógica de recuperação de itens do pedido
        return Ok(/* lista de itens */);
    }

    [HttpPatch("{itemId}")]
    public async Task<IActionResult> UpdateItemParcial(int pedidoId, int itemId, [FromBody] JsonPatchDocument<Item> patchDoc)
    {
        if (patchDoc == null)
        {
            return BadRequest();
        }

        // Chamar a lógica de atualização parcial de item

        return NoContent();
    }

    [HttpDelete("{itemId}")]
    public async Task<IActionResult> DeleteItem(int pedidoId, int itemId)
    {
        // Chamar a lógica de deleção de item

        return NoContent();
    }
}

Conclusão

Seguir as melhores práticas para desenvolver APIs RESTful é essencial para criar sistemas robustos e eficientes.

Entender e utilizar corretamente os verbos HTTP, juntamente com uma boa estrutura de código, garantirá que sua API seja fácil de manter e escalar.

Esperamos que esses exemplos em C# ajudem você a implementar suas próprias APIs de maneira eficaz.

Agora que você conhece um pouco mais sobre Rest APIs, me conte mais o que achou. Gostou?

Até!