RESTFUL

Basis Tecnologia da Informação S.A. - 2019

Visão Geral

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.

Estilo da arquitetura

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.

Comunicação entre cliente e servidor

Na arquitetura REST, os clientes enviam solicitações para recuperar ou modificar recursos, e os servidores enviam respostas a essas solicitações.

Padrão de 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

Verbos HTTP

Existem 5 verbos HTTP básicos que usamos em pedidos para interagir com recursos REST

VerboDecriçã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.

Utilizando verbos HTTP

MétodoURIUtilizaçã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.

Exemplos

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"
}

Cabeçalhos e Parâmetros

No cabeçalho da solicitação, o cliente indica o tipo de conteúdo enviado ao servidor.

TipoConteú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

Suporte a diferentes representações

É 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

Suporte a diferentes representações

  • HTML

  • XML

  • JSON

Códigos de Resposta

As respostas do servidor contêm códigos de status para alertar o cliente sobre informações sobre o sucesso da operação.

Classe Semântica

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ódigos de Resposta 2xx

CódigoDescriçãoQuando 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ódigos de Resposta 3xx

CódigoDescriçãoQuando 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ódigos de Resposta 4xx

CódigoDescriçãoQuando 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ódigos de Resposta 5xx

CódigoDescriçãoQuando 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.

Segurança

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

Configuração

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.

Exemplos Request

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/

Exemplos Response

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.br

Conclusão

REST 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.