Representational State Transfer (REST) é um estilo arquitetural de software que fornece diretrizes sobre como uma API deve funcionar. Foi criado como um guia para gerenciar a comunicação em uma rede complexa como a Internet. REST é um conjunto de princípios e restrições que, quando seguidos, permitem a criação de serviços web escaláveis, eficientes e fáceis de manter.
As APIs RESTful, ou APIs REST, são APIs que seguem o estilo arquitetural REST para o design e interação com serviços web. Além de usar as APIs para comunicar e compartilhar dados entre dois ou mais softwares ou aplicativos, as APIs RESTful contribuem para a eficiência, escalabilidade e flexibilidade de aplicações web, desempenhando um papel importante no desenvolvimento web. Outros benefícios das APIs RESTful no aspecto de desenvolvimento web são: estado sem sessão, compatibilidade e interoperabilidade, integração simplificada, segurança aprimorada e simplicidade.
Dois conceitos principais que são essenciais para entender como as APIs RESTful funcionam são: Endpoints e Recursos
-
RECURSOS: Recursos são quaisquer informações que podem ser identificadas, nomeadas e manipuladas. Eles são as abstrações-chave que são expostas via API.
-
ENDPOINT: Um endpoint é o ponto de acesso ou o URL específico (Localizador de Recursos Uniforme) ou URI que representa um recurso ou uma coleção de recursos por meio dos quais os clientes podem interagir com a API.
Principais Princípios da Arquitetura RESTful
Os principais princípios da arquitetura RESTful, também conhecidos como restrições REST, definem coletivamente a arquitetura RESTful e orientam o design de serviços da web que seguem essas restrições. Os princípios incluem:
-
STATELESSNESS: Cada solicitação de um cliente para um servidor deve conter todas as informações necessárias para entender e processar a solicitação. A falta de estado melhora a escalabilidade e simplifica a implementação do servidor.
-
INTERFACE UNIFORME: Sub-restrições como identificação de recursos por URL, manipulação de recursos por representação, mensagem autoexplicativa e interação de clientes com aplicativos exclusivamente por meio de hipermedia, comumente conhecido como HATEOAS (Hypermedia as the Engine of Application State), permitem uma interface uniforme e consistente.
-
ARQUITETURA CLIENTE-SERVIDOR: Os sistemas RESTful seguem uma estrutura em que o cliente e o servidor são entidades separadas que se comunicam por meio de uma rede. O cliente é responsável pela interface do usuário e pela experiência do usuário, enquanto o servidor é responsável por processar solicitações, gerenciar recursos e manter a lógica de negócios da aplicação. Essa separação de preocupações melhora a escalabilidade e flexibilidade.
-
SISTEMA EM CAMADAS: Existem várias camadas, sendo que cada camada tem sua funcionalidade específica na arquitetura REST. Cada camada interage com a camada adjacente para promover modularidade e escalabilidade.
-
CÓDIGO SOB DEMANDA: Este princípio fornece uma maneira para aplicações cliente carregarem e executarem código fornecido pelo servidor, melhorando as capacidades do cliente. Embora “Código sob Demanda” possa fornecer flexibilidade, nem sempre é adequado para todos os cenários devido a considerações de segurança e ao potencial de aumento do acoplamento entre o cliente e o servidor. A decisão de usar “Código sob Demanda” depende dos requisitos e restrições específicos da aplicação em desenvolvimento.
-
CACHEABILIDADE: A cacheabilidade melhora o desempenho permitindo que os clientes reutilizem representações previamente obtidas, reduzindo a necessidade de solicitações repetidas ao servidor.
Endpoints em APIs RESTful
Endpoints definem a funcionalidade ou ações realizadas em recursos, como recuperar uma lista de itens, criar um novo item, atualizar um item existente ou excluir um item. APIs RESTful frequentemente possuem vários endpoints para realizar diferentes operações no mesmo recurso ou para trabalhar com diferentes recursos.
Os endpoints desempenham um papel importante no design das APIs, servindo como pontos de acesso pelos quais os clientes interagem com a API. Alguns dos endpoints importantes no design de APIs são:
-
Exposição de Recursos: Endpoints definem os recursos ou coleção de recursos expostos pela API, e cada endpoint define um recurso específico ou conjunto de recursos, deixando claro com quais recursos ou conjunto de recursos um cliente pode interagir.
-
Definição de Operação: Endpoints especificam a ação que os clientes podem realizar nos recursos. Métodos HTTP como GET, POST, PUT e DELETE são usados para definir a ação.
-
Modularidade e Escalabilidade: Os endpoints promovem a modularidade ao resumir funcionalidades específicas relacionadas a um recurso específico ou conjunto de recursos. A modularidade melhora a manutenibilidade da API e permite um desenvolvimento escalável.
-
Design Claro e Intuitivo: Ao escolher convenções de nomenclatura significativas e consistentes para os endpoints, os desenvolvedores podem entender facilmente o propósito e a funcionalidade de cada endpoint, o que contribui para a clareza e design intuitivo da API.
Há diferentes tipos de endpoints categorizados com base em sua funcionalidade e os tipos de operações que suportam. Alguns dos tipos diferentes são:
-
Endpoints de Leitura e Recuperação: usados para recuperar recursos do servidor usando o método HTTP GET.
-
Endpoints de Criação ou POST: usados para criar novos recursos no servidor usando o método HTTP POST
-
Excluir Endpoints: usado para excluir um recurso no servidor usando o método DELETE HTTP
-
Atualizar ou PUT Endpoints: usado para atualizar recursos existentes no servidor usando o método PUT HTTP.
-
Pesquisar ou Consultar Endpoints: Permite que os clientes recuperem um subconjunto de recursos com base em critérios especificados usando o método GET HTTP.
-
Listar Endpoints: Recupera uma coleção ou lista de recursos usando o método GET HTTP.
Recursos em APIs RESTful
Recursos são abstrações-chave que representam qualquer informação que possa ser identificada, nomeada e manipulada. Exemplos de recursos incluem perfis de usuários, artigos e qualquer outra entidade de dados com a qual as aplicações lidam. Os recursos podem ser identificados por um URI (Identificador de Recurso Uniforme) distinto. Eles geralmente estão em formatos JSON ou XML, e cada recurso pode ser criado, recuperado, atualizado e excluído usando métodos HTTP padrão.
A base para construir uma arquitetura RESTful é identificar seus recursos. Algumas das principais diretrizes para identificar recursos no design de API incluem:
-
Use Substantivos para Nomes de Recursos: em vez de usar verbos como “obter” ou “recuperar” no nome do recurso, use substantivos como “usuários” ou “produtos”.
-
Convenções de Nomenclatura de Recursos: Siga uma convenção de nomenclatura consistente para recursos. Devem ser usados nomes fáceis de entender e lembrar.
-
Use Substantivos no Plural para Coleções de Recursos: Por exemplo, ‘/usuários’ é uma coleção de recursos de usuário e ‘/produtos’ é uma coleção de recursos de produto.
-
Documentação: As APIs devem ser claramente documentadas para permitir que os usuários entendam os recursos disponíveis e como interagir com eles.
Relação entre Recursos e Pontos Finais
A relação entre recursos e pontos finais é fundamental para o design e funcionalidade de uma API RESTful. Algumas das relações entre eles são:
-
Pontos Finais como Pontos de Acesso: Um ponto final é o URI ou URL específico que corresponde a um recurso ou a uma coleção de recursos. Ele fornece um ponto de acesso concreto através do qual os clientes podem interagir com o recurso.
-
Ponto Final Identifica um Recurso: O ponto final identifica um recurso ou conjunto de recursos. Por exemplo, se você tiver um recurso representando usuários, o ponto final pode ser ‘/usuários.’
-
Métodos HTTP definem Operações: Os endpoints estão associados a métodos HTTP específicos (GET, POST, PUT, DELETE, etc.), que definem as operações que podem ser realizadas no recurso correspondente.
-
Representação do Recurso: O endpoint troca representações do recurso com o servidor quando o cliente interage com ele. Essas representações podem estar em diferentes formatos, como JSON ou XML, e contêm o estado ou informações sobre o recurso. A representação é a carga útil da solicitação ou resposta HTTP.
-
Interface Uniforme: A relação entre recursos e endpoints adere às restrições de interface uniforme do REST. A combinação de recursos e endpoints cria uma estrutura de API consistente e previsível.
-
HATEOAS (Hypermedia as the Engine of Application State): Envolve a inclusão de links de hipermídia nas representações de recursos, permitindo que os clientes naveguem dinamicamente pela API.
Conclusão
A interação entre recursos e endpoints é fundamental no design de API RESTful para o desenvolvimento de uma arquitetura unificada e eficiente. Recursos, que representam entidades conceituais, definem as entidades essenciais do sistema, como usuários ou produtos. Endpoints, representados por URIs, servem como portais para os clientes interagirem com esses recursos por meio de métodos HTTP especificados. Seguindo os princípios RESTful, essa relação simbiótica garante uma interface uniforme, comunicação autodescritiva e navegação dinâmica por meio de links de hipermídia (HATEOAS). O alinhamento cuidadoso de recursos e endpoints vai além de um detalhe técnico; é um conceito de design que impulsiona a clareza, escalabilidade e adaptabilidade da API, resultando em uma experiência intuitiva e perfeita tanto para desenvolvedores quanto para usuários.
Source:
https://inioluwa2003.hashnode.dev/demystifying-restful-apis-a-deep-dive-into-endpoints-and-resources