Representational State Transfer
Publicado em 30/11/2022REST é um estilo de arquitetura criado por Roy Fielding no ano 2000 para sua tese de doutorado. A palavra REST é um acrônimo para: Representational State Transfer ou em bom português: Transferência Representacional de Estado.
Geralmente vemos o termo ser aplicado para o desenvolvimento de APIs, porém, por ser um estilo de arquitetura, REST pode ser aplicado a qualquer sistema em diferentes contextos.
O REST é formado por um conjunto de especificações, que tem por objetivo facilitar a comunicação entre diferentes sistemas. Quanto mais dessas especificações forem aplicadas mais REST será a aplicação, ou seja, ela será uma aplicação RESTful. As especificações definem que para ser RESTful a aplicação precisa ser:
-
Client-Server - separa a responsabilidade do backend e do frontend, ou seja, cada um deve trabalhar de forma independente.
-
Stateless - não pode manter estado da requisição. O servidor não deve guardar a sessão do cliente, ou seja, ao acessar um determinado recurso o cliente fornecerá todas as informações necessárias que garanta que ele tenha permissão para consumir o recurso solicitado. Ex. credenciais de acesso, tokens.
-
Cache - O servidor precisa informar ao cliente quando um recurso pode ser reutilizado.
-
Uniform Interface - Procura-se estabelecer padrões para a aplicação. Nesse ponto destaca-se a padronização de quatro sub-requisitos.
- Identificação uniforme dos recursos.
- Manipulação dos recursos através de representações, nesse caso não é o próprio recurso que será manipulado e sim a sua representação, como se fosse uma foto do que tem no server. Essa representação pode ser feita em diferentes formatos: JSON, XML, HTML, TXT entre outros.
- Mensagens auto descritivas.
- O uso de hypermedia para fazer a navegação entre os recursos. Um bom exemplo disso é a própria web, quando fazemos uma navegação através de links que nos levam de uma página a outra.
-
Layered System - A arquitetura será construída em camadas, onde cada componente não pode ver além da camada com a qual está a interagir, ou em outras palavras, o cliente não precisa saber quais são os processos executados quando ele acessa um determinado recurso.
-
Code-On-Demand - Pode ser definido como a capacidade do cliente baixar e executar códigos do seu lado.