Voltar ao blogue
Engenharia
Sorin-Gabriel MaricaLast updated on Mar 31, 20266 min read

Restrições arquitetónicas da API REST

Restrições arquitetónicas da API REST

As APIs assumem muitas formas e tamanhos. Embora muitos programadores tenham de agradecer às APIs por tornarem o seu trabalho mais fácil de gerir de centenas de maneiras diferentes, poucos dedicam tempo a aprender mais sobre estas interfaces.

Nós compreendemos. O tempo é limitado e compreender o que define uma API REST pode não ser útil para todos. Não negamos isso, mas há uma razão pela qual praticamente qualquer pessoa deveria aprender isto: é extremamente interessante. Além disso, se quiser projetar ou trabalhar com uma API, vale a pena saber mais sobre o assunto.

Assim, neste artigo, vamos dar uma olhadela aos bastidores das APIs REST e compreender como os seus princípios de design as tornaram no software essencial que são hoje.

O que significa ser RESTful

A famosa abreviatura significa «Representational State Transfer», que é um estilo de arquitetura de software. A sua utilização mais comum é facilitar a utilização de serviços Web com uma abordagem padronizada e universal.

Estes serviços Web oferecem os seus recursos Web numa representação textual e permitem que sejam lidos e processados com um protocolo sem estado. As operações que um cliente pode realizar são predefinidas e bem conhecidas, geralmente baseadas nos protocolos HTTP.

As APIs e o software RESTful não se baseiam em nenhum avanço tecnológico ou de programação. Nem sequer são assim tão novos, tendo sido concebidos pela primeira vez em 2000. A ideia por trás do REST é impor certas regras à API para que se obtenha mais desempenho, escalabilidade, simplicidade, modificabilidade, visibilidade, portabilidade e fiabilidade.

São muitos benefícios, mas como é que as APIs REST os alcançam, poderá perguntar? Simples, seguindo seis restrições. Na verdade, estas regras são as características mais marcantes do estilo arquitetónico RESTful.

As seis restrições arquitetónicas das APIs REST

1. Arquitetura cliente-servidor

A função de uma API é conectar dois softwares sem limitar as suas próprias funcionalidades. Este objetivo é uma das restrições centrais do REST: o cliente (que faz as solicitações) e o servidor (que fornece as respostas) permanecem separados e independentes.

Quando feito corretamente, o cliente e o servidor podem atualizar-se e evoluir em direções diferentes sem que isso tenha impacto na qualidade da troca de dados entre eles. Isto é especialmente importante em vários casos em que um servidor tem de atender a muitos clientes diferentes. Pense nas APIs meteorológicas — elas têm de enviar dados para inúmeros clientes diferentes (todos os tipos de dispositivos móveis são bons exemplos) a partir de uma única base de dados.

2. Ausência de estado

Para que uma API seja stateless, tem de tratar as chamadas de forma independente umas das outras. Cada chamada à API tem de conter os dados e comandos necessários para concluir a ação pretendida.

Um exemplo de uma API não stateless seria se, durante uma sessão, apenas a primeira chamada tivesse de conter a chave da API, que é então armazenada no lado do servidor. As chamadas de API seguintes dependem dessa primeira, uma vez que esta fornece as credenciais do cliente.

No mesmo caso, uma API sem estado garantirá que cada chamada contenha a chave da API e que o servidor espere ver uma prova de acesso em cada ocasião.

As APIs sem estado têm a vantagem de que uma chamada incorreta ou com falha não prejudica as que se seguem.

3. Interface uniforme

Embora o cliente e o servidor mudem de formas diferentes, é importante que a API continue a facilitar a comunicação. Para tal, as APIs REST impõem uma interface uniforme que pode facilmente acomodar todo o software ligado.

Na maioria dos casos, essa interface baseia-se nos protocolos HTTP. Além de estabelecer regras sobre como os clientes e o servidor podem interagir, tem também a vantagem de ser amplamente conhecida e utilizada na Internet. Os dados são armazenados e trocados através de ficheiros JSON devido à sua versatilidade.

4. Sistema em camadas

Para manter a API fácil de compreender e escalar, a arquitetura RESTful determina que o design seja estruturado em camadas que operam em conjunto.

Com uma hierarquia clara para estas camadas, a execução de um comando significa que cada camada desempenha a sua função e, em seguida, envia os dados para a seguinte. As camadas conectadas comunicam entre si, mas não com todos os componentes do programa. Desta forma, a segurança geral da API também é melhorada.

Se o âmbito da API mudar, é possível adicionar, modificar ou remover camadas sem comprometer outros componentes da interface.

5. Capacidade de armazenamento em cache

Não é raro que as solicitações de uma API sem estado tenham uma sobrecarga significativa. Em alguns casos, isso é inevitável, mas para solicitações repetidas que necessitam dos mesmos dados, armazenar essas informações em cache pode fazer uma enorme diferença.

O conceito é simples: o cliente tem a opção de armazenar localmente certos dados por um período de tempo predeterminado. Quando faz uma solicitação desses dados, em vez de o servidor enviá-los novamente, utiliza a versão armazenada.

O resultado é simples: em vez de o cliente enviar várias solicitações complexas ou dispendiosas num curto espaço de tempo, só precisa de o fazer uma vez.

6. Código sob demanda

Ao contrário das outras restrições de que falámos até agora, a última é opcional. A razão para tornar o «código sob demanda» opcional é simples: pode representar um grande risco de segurança.

O conceito consiste em permitir que código ou applets sejam enviados através da API e utilizados pela aplicação. Como se pode imaginar, código desconhecido proveniente de uma fonte duvidosa pode causar danos, pelo que é melhor reservar esta restrição para APIs internas, onde há menos receio de hackers e pessoas com más intenções. Outra desvantagem é que o código tem de estar na linguagem de programação adequada para a aplicação, o que nem sempre é o caso.

A vantagem é que o “código sob demanda” pode ajudar o cliente a implementar as suas próprias funcionalidades em tempo real, com menos trabalho necessário na API ou no servidor. Em essência, permite que todo o sistema seja muito mais escalável e ágil.

Serão as APIs REST o caminho do futuro?

O foco do design RESTful está na eficiência e escalabilidade num mundo dominado pela web. Como se pode imaginar, isto tornou a arquitetura bastante popular, e é muito provável que a vejamos tornar-se ainda mais difundida nos próximos anos.

A principal preocupação de muitos programadores e especialistas em segurança é o quão vulneráveis as APIs web podem ser se forem criadas sem o devido cuidado. É claro que os hackers têm sido e continuarão a ser um problema para as APIs e para o software em geral. Ainda assim, não é como se fôssemos deixar de as utilizar. Em vez disso, cabe aos especialistas em segurança encontrar novas formas de proteger os nossos programas.

Essa forma de pensar, juntamente com o objetivo de facilitar a vida dos programadores, foi o que nos levou a desenvolver a WebScrapingAPI, uma API REST de extração de dados que trata de tudo, desde a rotação de proxies até à renderização de Javascript e à resolução de CAPTCHAs. Confira para ver o que uma API REST pode fazer!

Sobre o autor
Sorin-Gabriel Marica, Desenvolvedor Full-Stack @ WebScrapingAPI
Sorin-Gabriel MaricaDesenvolvedor Full-Stack

Sorin Marica é engenheiro Full Stack e DevOps na WebScrapingAPI, onde desenvolve funcionalidades do produto e mantém a infraestrutura que garante o bom funcionamento da plataforma.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.