O que é API REST?

Uma API REST, ou interface de programação do aplicativo de transferência de estado representacional, é um estilo arquitetônico normalmente visto como o padrão para projetar e criar os aplicativos em rede que alimentam a Web. Ele fornece um conjunto de regras e restrições que, quando seguidas, resultam em serviços da Web simples, escalonáveis e fáceis de integrar.

API REST definida

Uma API REST é uma API que está em conformidade com os princípios de design do estilo arquitetônico REST. O REST gira em torno da ideia de recursos, que podem ser qualquer informação, como um usuário, produto, documento ou coleção de itens. 

Uma API REST oferece uma maneira para um aplicativo cliente acessar e manipular esses recursos usando um conjunto predefinido de operações sem estado.

Como uma API REST funciona?

1. O cliente envia a solicitação

Um aplicativo cliente (como um app para dispositivos móveis, navegador da Web ou outro servidor) inicia uma solicitação para a API realizar uma ação. Essa solicitação é enviada a um URL específico e inclui um método HTTP, cabeçalhos com metadados e, às vezes, um corpo de solicitação com dados.

2. O servidor processa a solicitação

O servidor recebe e valida a solicitação, confirmando que o cliente está autenticado e autorizado a realizar a ação solicitada. Em seguida, ele processa a solicitação, o que pode envolver a recuperação de dados de um banco de dados, a criação de um novo recurso ou a atualização de um recurso atual.

3. O servidor envia a resposta

Depois de processar a solicitação, o servidor envia uma resposta de volta ao cliente. Essa resposta inclui um código de status HTTP que indica o resultado (por exemplo, 200 "OK" quando for bem-sucedido, "404 Not Found" se o recurso não existir, "401 Unauthorized" para problemas de segurança), além dos dados solicitados no corpo da resposta.

4. Transferência de dados

Os dados transferidos entre o cliente e o servidor são uma "representação" do estado do recurso. JSON (JavaScript Object Notation) é o formato mais comum para esses dados porque é leve, legível por humanos e fácil de analisar para linguagens de programação.

Arquitetura e componentes da API REST

O poder e a escalonabilidade do REST vêm de um conjunto de restrições arquitetônicas que orientam seu design. Um sistema que segue essas restrições é considerado "RESTful".

Diagrama do modelo da API REST

Recursos

Um recurso é um conceito fundamental no REST. É um objeto com um tipo, dados associados, relações com outros recursos e um conjunto de métodos que operam nele. Por exemplo, em uma API de e-commerce, um "produto" ou um "cliente" seriam recursos.

URIs (identificadores uniformes de recursos)

Cada recurso é identificado exclusivamente por um URI. Uma API bem projetada usa URIs limpas, descritivas e consistentes para identificar seus recursos. Por exemplo, /users pode identificar uma coleção de usuários, e /users/123 identificaria um usuário específico com o ID 123.

Representações

Um cliente não interage diretamente com o recurso, mas com uma representação dele. O formato de representação mais comum é o JSON, mas outros como XML ou HTML também podem ser usados. Isso oferece uma maneira flexível de representar o estado de um recurso.

Sem estado

Cada solicitação de um cliente para o servidor precisa conter todas as informações necessárias para que o servidor entenda e processe a solicitação. O servidor não armazena nenhum contexto do cliente ou estado da sessão entre as solicitações. Essa restrição torna as APIs REST altamente escalonáveis, porque qualquer servidor pode lidar com qualquer solicitação.

Arquitetura cliente-servidor

O cliente e o servidor são separados, e a API atua como a interface entre eles. Essa separação de preocupações permite que o aplicativo do lado do cliente e o aplicativo do lado do servidor evoluam de forma independente.

Interface uniforme

O REST exige uma interface consistente e uniforme entre o cliente e o servidor. Isso é feito com o uso de métodos HTTP padrão, URIs para identificação de recursos e hipermídia como o mecanismo de estado do aplicativo (HATEOAS).

Capacidade de armazenamento em cache

As respostas do servidor devem ser definidas como armazenáveis em cache ou não armazenáveis em cache. Quando uma resposta pode ser armazenada em cache, um cliente ou intermediário pode reutilizar essa resposta para solicitações idênticas subsequentes, melhorando significativamente o desempenho e reduzindo a carga do servidor.

Sistema em camadas

Um cliente conectado a uma API REST normalmente não consegue saber se está conectado diretamente ao servidor final ou a um intermediário no caminho. É possível introduzir servidores intermediários, como gateways de API ou balanceadores de carga, na arquitetura para melhorar a escalonabilidade, a segurança e o desempenho.

Práticas recomendadas da API REST

Os URIs devem representar recursos, então precisam usar substantivos (no plural para grupos, no singular ou um ID para um item específico), e não verbos. Por exemplo, use /users para representar todos os usuários, não /getAllUsers.

Use os verbos HTTP padrão para representar ações: GET para recuperação, POST para criação, PUT para atualizações e DELETE para remoção. Isso cria uma interface previsível e consistente.

Um princípio fundamental do REST é que uma resposta deve incluir links para outras ações ou recursos relacionados. Isso permite que o cliente navegue pela API de forma dinâmica sem precisar codificar padrões de URI.

Quando você precisa fazer alterações interruptivas em uma API, introduza uma nova versão. A prática mais comum é incluir o número da versão no URI, como /api/v2/users. Isso permite que os clientes atuais continuem usando a versão antiga, enquanto os novos clientes podem adotar a nova.

Quando uma solicitação falha, forneça uma mensagem de erro clara e útil no corpo da resposta, com o código de status HTTP apropriado (por exemplo, 400 Bad Request, 500 Internal Server Error). Isso ajuda o desenvolvedor do lado do cliente a entender o que deu errado.

Proteja sua API implementando uma autenticação robusta (por exemplo, OAuth 2.0, chaves de API) para verificar a identidade e a autorização do cliente e garantir que ele só tenha acesso aos recursos que tem permissão para ver. Sempre use TLS/SSL para criptografar o tráfego.

Para endpoints que podem retornar um grande número de itens, implemente a paginação para retornar dados em partes gerenciáveis. Além disso, forneça parâmetros de consulta para permitir que os clientes filtrem e classifiquem os resultados, reduzindo a quantidade de dados transferidos.

Benefícios do uso de APIs REST

Simplicidade e legibilidade

As APIs REST usam métodos HTTP padrão e URIs legíveis por humanos, o que as torna relativamente fáceis para os desenvolvedores aprenderem, usarem e depurarem. A natureza autodescritiva da interface simplifica os esforços de integração.

Escalonabilidade

A natureza sem estado do REST é um fator essencial para a escalonabilidade. Como o servidor não precisa manter sessões de clientes, é fácil distribuir solicitações entre vários servidores, e novos servidores podem ser adicionados para lidar com o aumento da carga sem complexidade.

Flexibilidade

O REST oferece suporte a vários formatos de dados, sendo o JSON o mais popular devido à sua natureza leve e amplo suporte. Essa flexibilidade permite que as APIs REST sejam usadas por uma ampla variedade de aplicativos cliente, de navegadores da Web a dispositivos móveis e sensores de IoT.

Desacoplamento de cliente e servidor

A arquitetura cliente-servidor imposta pelo REST cria uma separação clara de preocupações. Isso permite que os desenvolvedores trabalhem no front-end do lado do cliente e no back-end do lado do servidor de forma independente, o que pode acelerar os ciclos de desenvolvimento.

Não dependem do idioma

Como REST é um estilo arquitetônico baseado em HTTP padrão, ele pode ser implementado em qualquer linguagem de programação e consumido por qualquer cliente capaz de fazer solicitações HTTP. Isso oferece máxima interoperabilidade entre diversas pilhas de tecnologia.

Exemplos de API REST

Exemplo de API pública

Um caso de uso comum é um app de previsão do tempo para dispositivos móveis que busca a previsão atual para um local específico em uma API pública de previsão do tempo.

O aplicativo cliente faz uma solicitação HTTP GET ao endpoint da API, incluindo o local e uma chave de API para autenticação.

curl

"https://api.weather-service.com/v1/current?location=94043&key=YOUR_API_KEY"

curl

"https://api.weather-service.com/v1/current?location=94043&key=YOUR_API_KEY"

O servidor processa a solicitação, recupera os dados meteorológicos do local especificado e retorna uma resposta JSON.

{

 "temperature": 20,

 "unit": "celsius",

 "condition": "Clear",

 "humidity": 55

}

{

 "temperature": 20,

 "unit": "celsius",

 "condition": "Clear",

 "humidity": 55

}

Exemplo de API interna

Em uma arquitetura de microsserviços, um serviço de "produto" talvez precise receber um preço atualizado de um serviço de "inventário" antes de exibi-lo em um site de e-commerce. 

O serviço de produtos faz uma solicitação HTTP GET interna ao endpoint da API do serviço de inventário para um ID de produto específico.

curl

"http://inventory-service.internal/api/products/PN-5821/price"

curl

"http://inventory-service.internal/api/products/PN-5821/price"

O serviço de inventário pesquisa o preço atual e retorna uma resposta JSON simples.

{

"productId": "PN-5821",

"price": 1299.99,

"currency": "USD"

}

```

{

"productId": "PN-5821",

"price": 1299.99,

"currency": "USD"

}

```

Resolva seus desafios comerciais com o Google Cloud

Clientes novos recebem US$ 300 em créditos para usar no Google Cloud.

Outros recursos

Vá além

Comece a criar no Google Cloud com US$ 300 em créditos e mais de 20 produtos do programa Sempre gratuito.

Google Cloud