REST API — é um estilo arquitetônico de interação entre componentes em uma rede distribuída, baseado nos princípios da Arquitetura Orientada a Recursos e utilizando o protocolo HTTP para transferência de dados. Cada recurso no REST é identificado por uma URL única e suporta um conjunto de operações padrão através de métodos HTTP: GET, POST, PUT, PATCH, DELETE. De acordo com a ProgrammableWeb (2025), mais de 75% de todas as APIs web públicas são construídas sobre a arquitetura REST, tornando-a o padrão de fato para o desenvolvimento móvel e web. O REST garante escalabilidade, independência cliente-servidor e cache eficiente, o que é especialmente importante para aplicativos móveis com conexões de rede instáveis.
Principais pontos
REST API (API de Transferência de Estado Representacional) é um estilo arquitetônico proposto por Roy Fielding em sua tese de doutorado em 2000. Ele define um conjunto de restrições e princípios para projetar protocolos de rede. Uma API que cumpre essas restrições é chamada de RESTful. REST não é um protocolo ou padrão — é uma abordagem arquitetônica que utiliza protocolos existentes (principalmente HTTP) para troca de dados entre cliente e servidor.
A ideia chave do REST é a arquitetura orientada a recursos. Em vez de chamar métodos no servidor (como em SOAP ou RPC), o cliente opera sobre recursos: obtém listas, cria novos, atualiza ou exclui. Cada recurso é uma entidade de domínio: usuário, pedido, produto, artigo. Um recurso possui um estado que é transmitido ao cliente em um formato padronizado, geralmente JSON. O servidor não armazena o estado do cliente entre requisições — este é o princípio stateless, um requisito chave do REST.
Características principais da REST API:
REST baseia-se em seis restrições arquitetônicas formuladas por Fielding. A conformidade com essas restrições garante escalabilidade, desempenho e facilidade de integração. Cada princípio resolve um problema específico de sistemas distribuídos — desde a necessidade de cache até requisitos de segurança. Vamos examinar cada princípio em detalhes.
| Princípio | Descrição | Problema que resolve |
|---|---|---|
| Client-Server | Separação do cliente e servidor, evolução independente | Acoplamento de componentes |
| Stateless | Cada requisição contém todos os dados para processamento | Escalonamento de servidores |
| Cacheable | As respostas são marcadas como armazenáveis em cache ou não | Redução da carga de rede |
| Layered System | Camadas intermediárias são invisíveis ao cliente | Segurança e balanceamento de carga |
| Uniform Interface | Interface única: recursos, métodos, códigos de status | Simplificação da arquitetura |
| Code on Demand | Opcional: transferência de código executável ao cliente | Extensibilidade do lado do cliente |
O princípio Uniform Interface inclui adicionalmente quatro sub-restrições: identificação de recursos via URI, manipulação de recursos através de representações, mensagens autodescritivas e HATEOAS (Hipermídia como Mecanismo do Estado da Aplicação). A última sub-restrição é frequentemente ignorada na prática — a maioria das REST APIs modernas não implementa HATEOAS completamente, o que gera discussões sobre se tal API é “realmente” RESTful.
O princípio Stateless é um dos mais importantes para escalabilidade. A ausência de sessões no servidor significa que qualquer instância do servidor pode processar qualquer requisição. Isso simplifica o escalonamento horizontal: basta adicionar novos servidores atrás de um balanceador de carga. Para aplicativos móveis, stateless também significa que uma requisição pode ser enviada a qualquer servidor CDN, o que é crítico para disponibilidade global.
Cada método HTTP em REST API corresponde a uma operação específica em um recurso: GET para leitura, POST para criação, PUT para atualização completa, PATCH para atualização parcial, DELETE para exclusão. A idempotência dos métodos é uma característica chave: GET, PUT, DELETE são idempotentes (execução repetida produz o mesmo resultado), POST e PATCH não são. Isso é importante para lidar com erros de rede quando o cliente não sabe se a requisição chegou ao servidor.
Os códigos de status HTTP são parte integrante da REST API. Cada código carrega um significado específico: 200 OK para GET bem-sucedido, 201 Created para POST, 204 No Content para DELETE sem corpo de resposta, 400 Bad Request para dados inválidos, 401 Unauthorized para falta de autenticação, 404 Not Found para recurso inexistente. O uso correto dos códigos de status torna a API autodocumentada e simplifica a depuração.
JSON (Notação de Objetos JavaScript) é o formato principal de transferência de dados em REST API. Sua popularidade se deve à simplicidade, legibilidade humana e suporte nativo em JavaScript. JSON é transmitido com o cabeçalho Content-Type: application/json. Alternativas incluem XML (verboso, envelhecendo), YAML (conveniente para configuração, menos comum para APIs) e Protocol Buffers (binário, eficiente para sistemas de alta carga).
A estrutura de um objeto JSON em REST API geralmente inclui campos id, type e atributos do recurso. Para coleções, usa-se um array JSON com metadados de paginação. REST APIs modernas seguem a especificação JSON:API (jsonapi.org) ou JSON Schema para validação de respostas. O uso de um formato de dados unificado simplifica o desenvolvimento de bibliotecas cliente e a geração de documentação.
Exemplo de resposta JSON para uma lista de usuários:
{
"data": [
{
"id": 1,
"name": "Anna Petrova",
"email": "anna@example.com"
}
],
"meta": {
"total": 42,
"page": 1,
"per_page": 10
}
}
A escolha do formato de transferência de dados afeta o desempenho do aplicativo móvel. JSON comprime via GZIP em 70-80%, tornando-o aceitável para a maioria dos cenários. Para aplicações em tempo real com grandes volumes de dados (streaming, jogos), recomenda-se mudar para protocolos binários ou usar WebSocket em combinação com Protocol Buffers.
Vamos ver exemplos práticos de trabalho com REST API no lado do aplicativo móvel. Como exemplo, vamos pegar uma API para trabalhar com pedidos em uma loja online. Para cada método HTTP, são mostrados uma requisição e a resposta esperada do servidor. Os exemplos demonstram a estrutura típica de API RESTful usada no desenvolvimento móvel.
Uma requisição para obter todos os pedidos do usuário com paginação. A resposta contém um array de objetos de pedido e meta-informação para navegação entre páginas. Os parâmetros page e per_page são passados via query string.
// Interface Retrofit para REST API
interface OrderApi {
@GET("api/v1/orders")
suspend fun getOrders(
@Query("page") page: Int = 1,
@Query("per_page") perPage: Int = 20
): Response<OrderListResponse>
}
Criação de um novo pedido via requisição POST. O servidor retorna o status 201 Created e o objeto criado no corpo da resposta. Importante: a criação é feita na coleção /api/v1/orders, não em um recurso específico — este é o padrão RESTful padrão.
@POST("api/v1/orders")
suspend fun createOrder(
@Body order: CreateOrderRequest
): Response<OrderResponse>
// Exemplo de corpo de requisição
data class CreateOrderRequest(
val productId: String,
val quantity: Int,
val addressId: String
)
A exclusão de um recurso é feita com o método DELETE na URL específica do pedido. A exclusão bem-sucedida retorna 204 No Content. A idempotência do DELETE significa que uma requisição repetida à mesma URL retorna 404 Not Found, o que é tratado corretamente no cliente.
@DELETE("api/v1/orders/{id}")
suspend fun deleteOrder(
@Path("id") orderId: String
): Response<Unit>
// Uso no ViewModel
fun removeOrder(orderId: String) {
viewModelScope.launch {
val response = api.deleteOrder(orderId)
if (response.isSuccessful) {
showSuccess()
}
}
}
Estes exemplos demonstram uma implementação típica de REST API no lado Android usando Retrofit e Kotlin Coroutines. Para aplicativos iOS, o URLSession ou a biblioteca Alamofire em conjunto com protocolos Codable desempenham um papel semelhante. A estrutura da REST API permanece a mesma independentemente da plataforma — apenas o método de fazer requisições muda.
Projetar uma API RESTful de qualidade requer seguir convenções que tornem a API intuitiva para os desenvolvedores. Os recursos devem ser nomeados com substantivos no plural (/users, /orders, /products), os métodos HTTP devem refletir operações e as URLs devem representar a hierarquia de aninhamento. Erros devem retornar um JSON padronizado com código e mensagem, não apenas um status HTTP. Seguir estas convenções reduz a barreira de entrada para novos desenvolvedores e simplifica a integração.
Um erro comum ao projetar uma REST API é o aninhamento excessivo de recursos. Em vez de /users/1/orders/5/items/3, é melhor usar uma estrutura plana com parâmetros query: /items?order_id=5&user_id=1. Isso simplifica o cache, não requer manter caminhos longos no servidor e é mais fácil de documentar. A arquitetura plana também é mais compatível com consultas baseadas em grafo ao migrar para GraphQL no futuro.
A segurança da REST API é implementada através de autenticação (JWT, OAuth 2.0) e autorização no nível de recursos. Cada requisição deve verificar se o usuário tem acesso ao recurso solicitado. HTTPS é obrigatório — sem criptografia, tokens e dados são transmitidos em texto plano. Para aplicativos móveis, recomenda-se usar OAuth 2.0 com PKCE (Proof Key for Code Exchange) para obtenção segura de tokens.
O versionamento de REST API é necessário para compatibilidade reversa durante mudanças. As abordagens mais comuns são: versão na URL (/api/v1/orders), versão no cabeçalho (Accept: application/vnd.myapi.v1+json) e versão no parâmetro query (?api_version=1). O versionamento por URL é o método mais popular pois é explicitamente visível em logs e documentação. No entanto, ele viola o princípio REST de uma URL única por recurso.
O cache em REST API é implementado através dos cabeçalhos HTTP Cache-Control, ETag e Last-Modified. Requisições GET marcadas como armazenáveis em cache podem ser servidas do cache do navegador ou proxy sem contatar o servidor. Para aplicativos móveis, o cache é especialmente importante — reduz o consumo de dados e acelera a exibição de dados previamente carregados com conectividade ruim. ETag é um hash do conteúdo da resposta: o cliente o envia em If-None-Match, e o servidor retorna 304 Not Modified se os dados não mudaram.
Alternativas modernas à REST API incluem GraphQL (busca flexível de dados pelo cliente) e gRPC (protocolo binário sobre HTTP/2 para microsserviços). No entanto, REST continua sendo o padrão principal para APIs públicas devido à sua simplicidade, universalidade e amplo suporte de ferramentas. A escolha entre REST e alternativas depende dos requisitos específicos do projeto: complexidade das consultas, volume de dados, necessidades de atualizações em tempo real.
Perguntas frequentes
REST é um estilo arquitetônico, um conjunto de princípios. RESTful é uma API que segue estes princípios. Uma API RESTful respeita stateless, interface uniforme, cache e arquitetura cliente-servidor.
JSON é mais leve que XML (~30% menor em tamanho), analisa mais rápido e tem suporte nativo em JavaScript. XML ainda é usado em SOAP e sistemas legados, mas JSON é o padrão para APIs móveis.
Use HTTPS para criptografia, JWT ou OAuth 2.0 para autenticação. Adicione Rate Limiting, validação de entrada, política CORS e verificação de papéis em cada requisição.
HATEOAS é um princípio onde a resposta da API contém links para recursos relacionados. O cliente “navega” pela API através desses links em vez de URLs previamente conhecidas. Na prática, HATEOAS raramente é implementado completamente.
Se for necessária busca flexível de dados — mude para GraphQL. Para alto desempenho entre microsserviços — gRPC. Para atualizações em tempo real — WebSocket. REST é ideal para a maioria das APIs públicas.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também