Tag Archives: rest

Estilo REST {Métodos HTTP}

Step Verbs: Os Verbos disponíveis

Continuando a saga REST. Entenda hoje os principais métodos (verbos) REST, os Métodos HTTP de comunicação deste protocolo. Vamos lá:

A Arquitetura REST ocorre através de um conjunto de principais métodos.

rest_verbos

Para enviar/receber requests, o HTTP utiliza métodos ou verbos que identificam qual a ação deve ser executada em um determinado recurso.

As mensagens trafegam e utilizam de forma explicita os métodos HTTP. Temos os 5 verbos mais utilizados: GET, POST, PUT e DELETE. Eles podem ser mapeados para operações CRUD e realizar requisições HTTP.

CRUD

Como mencionado acima. Esta arquitetura dispõe de comandos já utilizados na Web(HTTP)

  • Create  POST
  • Read     GET
  • Update  PUT
  • Delete   DELETE

Estes métodos serão usados levando em consideração as outras regras do REST.

Substantivos (recursos) / Verbos (operações)

Sem o REST, as URLs  da WebApp para lidar com os registros ficavam semelhante a este formato produto/4/editar, no estilo REST não passamos mais ações/verbos na URI, para esta definição utilizaremos o método HTTP (GET, POST, PUT, DELET):

Ação / URI / Método HTTP

  • Buscar um produto        produto/4          GET
  • Editar um produto          produto/4          PUT
  • Deletar um produto       produto/4          DELETE

Esses verbos serão usados em nossa API para efetuar as operações CRUD.

Na prática

Buscar um usuário na webapp:

HTTP/1.1
GET http://webapp.com/user/aldo

GET

VerboHTTP  e Ação

GET solicita a apresentação/informações de um recurso.

Considerado o método mais simples. Ele irá recuperar, listar informações do serviço. Retornando a representação do recurso em um URI especificada.

rest_get_especifico

O GET não deve ter efeitos colaterais sobre o servidor.

As requisições GET devem ser seguras e idempotentes.

Listar todos os livros da biblioteca

GET /livros/

Buscar um livro “específico” com id igual a 4.

GET/livros/4

rest_get

Note a utilização do verbo GET.

POST

Este método envia informações que são usadas para criar um novo recurso (uma nova entrada de dados em nosso serviço).

O servidor irá atribuir a URI para o novo objeto e retorna este URI como parte da mensagem de resposta.

Solicitando que o recurso no URI execute uma ação com a entidade fornecida.

O POST é muito utilizado para criar uma nova entidade, mas é possível também atualizar uma entidade.

rest_post

Criar um novo livro

POST/livros

Aqui estou criando um livro com a utilização do verbo POST.

As informações enviadas no body da request são utilizadas para criar um novo recurso.

PUT

Este método atualiza um resource (determinado elemento) na URI informada. Ele irá armazenar uma entidade em um URI.

Também podemos utilizá-lo para criar (nova entidade), um novo recurso em um URI especificado, se o server permitir que os clientes especifiquem novos Uris.

rest_put

Modificar o livro com id igual a quatro

PUT/livros/4

Aqui estou alterando um livro existente. Atualizando um recurso na URI especificada.

DELETE

Este método remove um recurso na URI informada. No entanto, o recurso NÃO precisa ser removido imediatamente. Pode ser uma request assíncrona ou de longa duração.

rest_delete

Exclua um livro com id igual a quatro

DELETE /livros/1

Note na exclusão deste livro a utilização do verbo DELETE.

Deve retornar o statuscode 204 caso não exista nenhum recurso para a URI especificada.

Observações

Os métodos GET, PUT e DELETE são IDEMPOTENTES, ou seja, independentemente de quantas vezes ela se repete com os mesmos parâmetros, os resultados serão sempre os mesmos.

Estilo REST { Arquitetural }

O Modelo Arquitetural : Step One

Entendendo os conceitos e as características sobre o estilo arquitetural REST. Vamos lá:

Modelo Arquitetural

REST (Transferência de Estado Representacional) é um estilo de arquitetura projetado para a concepção de sistemas distribuídos, permitindo a comunicação entre serviços distribuídos entre plataformas e tecnologias diferentes.

Em resumo, o REST é um padrão de projeto de software a ser seguido na criação de uma webapp. Desenhado para permitir que programas/plataformas consigam conversar/trocar informações na web.

Roy Fielding

Proposto por Roy Fielding, um dos autores da especificação do protocolo HTTP e definiu o termo REST em 2000 (na sua dissertação de doutorado).

rest_intro_roy

O REST é baseado nos conceitos de Recursos e utilização de requisições HTTP. Hoje é a principal arquitetura utilizada com WebServices.

Leveza e Simplicidade

Apresentado como uma alternativa para a troca de dados.

O REST chega como uma opção mais LEVE e SIMPLES quando comparada ao SOAP. Embora o SOAP ainda seja bastante utilizado, o REST vem aumentando novos adeptos a cada dia.

Implementações HTTP

Atualmente possui implementações apenas relacionada ao HTTP, porém, ele não está restrito apenas ao HTTP.

Implementações Existentes

Grandes players como Node.js, .NET, Java e Ruby, já possuem as suas implementações REST. Isso mostra o poder do REST.

No universo .NET por exemplo, podemos construir serviços HTTP baseados em REST com WCF e o Asp.Net Web API Framework.

ASP.NET Web API por exemplo, é um framework para a construção de web APIs NET(Serviços HTTP) em cima da plataforma .NET, permitindo com isso que uma aplicação possa ser acessada por vários clientes em muitas plataformas.

Os 3 pilares

RESTfull Web Services, serviços que seguem esta arquitetura.

O REST é baseado em 3 pilares:

rest_intro

Na representação esquemática do modelo REST temos:  Resources, URI e Representação.

Resources

O REST se contrapõe a arquitetura SOAP.

Diferente do SOAP que é baseado em Ações, o REST é baseado em Recursos, um elemento (conjunto de dados) do qual uma aplicação depende, representando normalmente um item do negócio.

Resources pode ser qualquer coisa que tenha um URI, sendo um mapeamento conceitual para uma ou mais unidades.

Um recurso pode ser um Serviço que interage com qualquer coisa:

  • Catalog Web
  • ECommerce ou Sistema interno (tipo CRM)
  • Dispositivo (tipo Impressora)
  • etc…

URI

Quando realizamos requisições Web, precisamos dizer o caminho da mesma, o URI (Unified Resource Identifier) um identificador único de um recurso.

Representação

A representação é um estado instantâneo de um recurso em um ponto no tempo.

Sempre que um cliente HTTP for requisitar um resource, a sua representação será  retornada, e NÃO o próprio recurso.

{
"nome": "Aldo",
"email": "wa@gmail.com"
}

É isso mesmo! utilize JSON ou XML para representar os dados associados a um recurso.

A representação do resource será retornado para o cliente como HTML, XML, JSON, TXT, etc…

As Regras do Jogo

O REST NÃO É uma tecnologia ou padrão, mas, sim um conjunto de restrições e regras proposto por Roy Fielding como:

  • Stateless (sem estado), não deve haver monitoração de estado *
  • Cliente Servidor deve possuir um relacionamento modelo cliente/servidor
  • Cache
  • Interface Uniforme
  • Layered System dividido em Camadas
  • Código sob demanda (opcional)

(*) As Interações sem estado não armazenam nenhum contexto de cliente no servidor entre as requisições. O cliente mantém o estado da sessão.