DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on

REST - Uma breve introdução

Tabela de Conteúdo

Rest

O que é?

É um estilo de arquitetura de Software que possui um conjunto de restrições para a criação de APIs, sendo controlado pelo W3C. Em palavras mais simples, é um conjunto de regras que nossa aplicação deve seguir no momento de se comunicar com clientes, sejam eles Browsers ou outras APIs.


Restrições REST

Interface uniforme

O que é?

É a padronização sistemática e constante da interface de comunicação entre cliente e servidor. Essa interface é composta pelo endpoint, tipo de retorno e verbos HTTP.

Endpoint

O endpoint deve identificar o recurso a ser acessado/alterado, de forma que o recurso fique explícito na URL.

Tipo de retorno

Os retornos devem ser consistentes, ou seja, se enviarmos um requisição ao endpoint /products e retornarmos um Array contendo os produtos, o mesmo deve ser feito ao enviarmos uma requisição ao endpoint /categories (Array contendo as categorias).

Devemos construir os retornos padronizados para que seja possível "deduzir" o comportamento dos demais endpoints, sem a necessidade de "tentativa e erro".

Verbos HTTP

Toda a ação que vamos realizar deve ser identificada através de um verbo HTTP, sendo os principais POST, GET, PUT e DELETE. Reforçando que os verbos devem disparar ações correspondentes a seus significados, logo uma requisição GET deve apenas retornar algum recurso, sem alterar/deletar nada.


Cliente servidor

O que é?

É a desacoplação entre Cliente e Servidor, em outras palavras, nossa API deve poder ser consumida a partir de qualquer cliente, seja ele uma aplicação mobile, web, tv ou até mesmo Arduíno.

O princípio básico é a separação de responsabilidades, o servidor deve se preocupar somente com armazenamento e acesso aos dados, cache, log e outras funcionalidades essenciais para o bom funcionamento da aplicação,


Stateless

O que é?

O princípio Stateless significa que nossa aplicação não deve guardar informações em seu contexto. Uma variável que guarda o login, por exemplo.

Dessa forma, todas as requisições enviadas ao servidor devem ser autossuficientes, ou seja, devem possuir todas as informações necessárias para a realização da requisição, já que a API não irá armazenar nada.

Um exemplo fácil de entender é o de login:

Assim que uma pessoa usuária realiza o login em nosso site, iremos gerar um token de autenticação para ela, a partir daí, todas as requisições que essa pessoa for realizar, será preciso enviar o token de autenticação junto, pois nossa API "não se lembrará" da pessoa.


Cacheable

O que é?

Nossa API deve ser capaz de informar ao cliente se determinada resposta pode ser cacheada, e se puder, por quanto tempo deverá ser cacheada.

Nesse caso estamos nos referindo ao cache no lado do Cliente, logo a função de nossa API é apenas informar as regras que precisam ser seguidas.


Layered System

O que é?

Diferente da arquitetura MSC, o princípio do Layered System não tem relação com a organização do código, mas sim com a abstração da resposta da API. Isso significa que o Cliente não precisa saber o que foi feito para a resposta ser montada, apenas que recebeu uma resposta.


Code on Demand

O que é?

É a possibilidade do servidor enviar código ao cliente, esse código pode ser JavaScript, Python, C, C# ou de qualquer outra linguagem que faça sentido.

Esse princípio é opcional na construção de uma API REST, sendo assim podemos ter uma aplicação que não envia código ao servidor e continua sendo RESTful.

Top comments (3)

Collapse
 
drack112 profile image
João Vitor

Recomendação pata o proximo post: fale sobre ORM's, alias gostei do post

Collapse
 
gabrielhsilvestre profile image
Gabriel_Silvestre

Fala João, muito obrigado pelo feedback e sobre o post de ORM, já postei dois entrando um pouco no assunto.

Apesar de trazer conceitos "teoricos" que podem ser utilizados em outros ORM's, ambos focam mais no Sequelize, mas se tiver tempo pretendo trazer um sobre o Prisma.

Collapse
 
drack112 profile image
João Vitor

Então só tenho que dizer obrigado pelos posts, estão me ajudando bastante :)