Engenharia de Software: API & REST

Da série de estudos sobre desenvolvimento de software, hoje é dia de falar sobre dois elementos muito conhecidos actualmente: API e REST, este texto tem como objetivo abordar alguns conceitos e tópicos relevantes sobre cada um deles.



API (Application Programming Interface)


Em português, Interface de Programação de Aplicações, é um conjunto de rotinas e padrões estabelecidos por um software para que suas funcionalidades possam ser utilizadas por aplicações externas sem que estas precisem conhecer detalhes da implementação do software. Geralmente são criadas rotas que ficam expostas e recebem requisições HTTP com o objetivo de retornar dados num determinado padrão, sem esquecer a segurança com autenticação e autorização.


Vejamos um exemplo com actividades da vida real em que temos as seguintes personagens


1.A Maria (utilizador) vai à cafetaria e diz ao João (API) que quer um hambúrguer com as suas preferências (método e parâmetros);
2.O João (API) passa o pedido ao Pedro (a aplicação por detrás da API) para preparar o hambúrguer (pedido);
3.O Pedro prepara o hambúrguer e devolve-o ao João (resposta);
4.O João entrega o hambúrguer pronto à Maria (resposta).


Tipos de API Comuns


-API Web: as que os devs criam para serem consumidas por outras aplicações na Internet;

Rota de API web Laravel

-API de código fonte: as que as linguagens de programação ou frameworks fornecem, por exemplo, a API de datas, linguagens como Javascript, PHP, C# e outras fornecem um conjunto de mecanismos para aceder e manipular datas.


API de Datas do Javascript


REST (Representational State Transfer)


Transferência Representacional de Estado, é um modelo de arquitetura apresentado na tese de doutoramento de Roy Fielding  na decada de 2000 que fornece directrizes para que os sistemas distribuidos comuniquem directamente utilizando os princípios e protocolos da Web existentes, sem necessidade SOAP de qualquer outro protocolo sofisticado.


Existe um princípio no REST chamado STATELESSNESS, em que o servidor não precisa de saber em que estado se encontra o cliente e vice-versa.


O REST requer que um cliente efectue uma requisição ao servidor para enviar ou modificar dados. Uma requisição consiste em:


Estrutura de uma Requisição REST


-Um verbo ou método HTTP, que define que tipo de operação o servidor vai realizar;
-Um header, com o cabeçalho da requisição que fornece informações sobre a requisição;
-Um path (caminho ou rota) para o servidor, ex.: https://manuelluvuvamo.vercel.app/blog/programador_zero;
-Informação no corpo da requisição, sendo esta informação opcional.


Métodos HTTP mais utilizados


-GET: é geralmente usado para solicitar que um servidor envie um recurso ou informação;
-POST: é frequentemente utilizado para suportar formulários HTML, ou seja, envia dados de entrada para o servidor;
-PUT: edita e actualiza documentos num servidor;
-DELETE: elimina um determinado dado ou coleção do servidor.



APIs REST: Boas Práticas


Finalmente, as API REST, nesta parte gostaria de fazer algumas recomendações relacionadas com os endpoints (os URL's) que serão disponibilizados:


1.Usar pronomes em vez de verbos, e não misturar plural e singular:


   /getAllBooks ❌
   /createNewBook ❌
   /books ✅
   /categories ✅

2.Utilizar sub-recursos, ou seja, as relações existentes devem ser claramente indicadas no URL:


   GET /books/authors/100
   GET /books/100/authors (retorna os autores do livro 100)
   GET /books/100/authors/1 (retorna o autor 1 do livro 100)

3.Não igonrar os cabeçalhos HTTP, há informações que devem ser transmitidas através deles:


  • Content-Type: Indica qual o tipo de mídia de um recurso
  • Accept: anuncia quais os tipos de conteúdo, expressos como MIME types, que o cliente é capaz de compreender, normalmente JSON
  • Authorization: contém as credenciais para autenticar o agente do utilizador com o servidor
  • etc...

4.Versionamento da API


Versionar uma API é essencial tanto para os criadores quanto para os consumidores. Por exemplo:



Manter versões anteriores ativas por um período de transição permite que consumidores atualizem seus sistemas sem interrupções.



Sem esquecer façam testes, automatizados de preferência, seja eles unitários ou de integração.😅🐞



Obrigado por ler até aqui! Curta, compartilhe e deixe sua opinião Aqui! 💻🚀