Basis Tecnologia da Informação S.A. - 2019
REST, ou RESTfull, é um estilo de arquitetura para fornecer padrões entre sistemas Web, com o intuito de facilitar a comunicação entre os sistemas.
Separação de cliente e servidor. No estilo arquitetural REST, a implementação do cliente e a implementação do servidor podem ser feitas independentemente. Isso significa que o código no lado do cliente pode ser alterado sem qualquer alteração na operação do servidor ou o contrário.
Na arquitetura REST, os clientes enviam solicitações para recuperar ou modificar recursos, e os servidores enviam respostas a essas solicitações.
Um verbo HTTP, que define o tipo de operação a ser executada
Um cabeçalho, que permite ao cliente passar informações sobre o pedido
Um caminho para um recurso
Um corpo de mensagem opcional contendo dados
Existem 5 verbos HTTP básicos que usamos em pedidos para interagir com recursos REST
| Verbo | Decrição |
|---|---|
GET | Obter os dados de um recurso |
POST | Criar um novo recurso. |
PUT | Substituir os dados de um determinado recurso. |
PATCH | Atualizar parcialmente um determinado recurso. |
DELETE | Excluir um determinado recurso. |
HEAD | Similar ao GET, mas utilizado apenas para se obter os cabeçalhos de resposta, sem os dados em si. |
OPTIONS | Obter quais manipulações podem ser realizadas em um determinado recurso. |
| Método | URI | Utilização |
|---|---|---|
GET | /user | Recuperar os dados de todos os usuários. |
GET | /user/id | Recuperar os dados de um determinado usuário. |
POST | /user | Criar um novo usuário. |
PUT | /user/id | Atualizar os dados de um determinado usuário. |
DELETE | /user/id | Excluir um determinado usuário. |
Request:
[POST] http://myapplication/user
Body: { "name": "Smit" }
Response:
HTTP Code 201 Created
{ id: 1, name: "Smith" }
Request:
[GET] http://myapplication/user/1
Body: empty
Response:
HTTP Code 200 OK
{
id: 1,
nome: "Smith"
}No cabeçalho da solicitação, o cliente indica o tipo de conteúdo enviado ao servidor.
| Tipo | Conteúdo |
|---|---|
imagem | imagem/png, imagem/jpeg, imagem/gif |
áudio | audio/wav, imagem/mpeg |
video | video/mp4, video/ogg |
aplicação | aplicação/json, application/pdf, application/xml, aplicação/octet-stream |
É considerada uma boa prática o suporte a múltiplas representações em um serviço REST, pois isso facilita a inclusão de novos clientes. Os três principais formatos suportados pela maioria dos serviços REST
HTML
XML
JSON
As respostas do servidor contêm códigos de status para alertar o cliente sobre informações sobre o sucesso da operação.
2xx | Indica que a requisição foi processada com sucesso. |
3xx | Indica ao cliente uma ação a ser tomada para que a requisição possa ser concluída. |
4xx | Indica erro(s) na requisição causado(s) pelo cliente. |
5xx | Indica que a requisição não foi concluída devido a erro(s) ocorrido(s) no servidor. |
| Código | Descrição | Quando utilizar |
|---|---|---|
200 | OK | Em requisições GET, PUT e DELETE executadas com sucesso. |
201 | Created | Em requisições POST, quando um novo recurso é criado com sucesso. |
204 | No Content | Requisição executada com sucesso mas sem conteúdo de retorno. |
206 | Partial Content | Em requisições GET que devolvem apenas uma parte do conteúdo de um recurso. |
| Código | Descrição | Quando utilizar |
|---|---|---|
302 | Found | Em requisições feitas à URI’s antigas, que foram alteradas. |
304 | Not Modified | Indica que o recurso não foi modificado. Nesse caso, não há necessidade de retransmitir o recurso, pois o cliente ainda tem uma cópia baixada anteriormente. |
| Código | Descrição | Quando utilizar |
|---|---|---|
400 | Bad Request | Em requisições cujas informações enviadas pelo cliente sejam invalidas. |
401 | Unauthorized | Em requisições que exigem autenticação, mas seus dados não foram fornecidos. |
403 | Forbidden | Em requisições que o cliente não tem permissão de acesso ao recurso solicitado. |
404 | Not Found | Em requisições cuja URI de um determinado recurso seja inválida. |
405 | Method Not Allowed | Em requisições cujo método HTTP indicado pelo cliente não seja suportado. |
| Código | Descrição | Quando utilizar |
|---|---|---|
500 | Internal Server Error | Em requisições onde um erro tenha ocorrido no servidor. |
502 | Bad Gateway | O servidor recebe uma requisição inválida. |
503 | Service Unavailable | Em requisições feitas a um serviço que está fora do ar, para manutenção ou sobrecarga. |
504 | Gateway Timeout | Gateway ou proxy não consegue receber requisição. |
CORS (Cross-Origin Resource Sharing) é uma especificação do W3C que, quando implementado pelo navegador, permite que um site acesse recursos de outro site mesmo estando em domínios diferentes. Explicando um pouco melhor: os navegadores fazem uso de uma funcionalidade de segurança chamada Same-Origin Policy
Geralmente essa configuração é feita no lado da API e cada framework tem sua forma de configuração. A parte importante é a inclusão do Access-Control-Allow-Origin no header da reposta da API.
GET /recurso.php HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1
Accept: application/json, text/plain, */*
Referer: http://myapplication.com.br/
Origin: http://myapplication.com.br/HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Date: SAT, 04 MAY 2019 20:00:00 GMT
Server: Apache-Coyote/1.1
Content-Length: 35
Connection: keep-aliv
Access-Control-Allow-Origin: http://myapplication.com.brREST possui alguns princípios e restrições que devem ser utilizados e nos permite construir aplicações e serviços mais portáveis, escaláveis e com um maior grau de desacoplamento.