SlideShare uma empresa Scribd logo
Entendendo o HTTP para
Entender o REST
Mario Guedes | mario@arrayof.io
Vídeo da apresentação
• O vídeo da apresentação está em:
https://youtu.be/x0HT3Dg53i4
Olá! Aqui é Mario Guedes!
• Artesão de Software desde 1999
• https://arrayof.io - mario@arrayof.io
• https://eugostododelphi.dev
• Participe do primeiro encontro presencial
• https://www.meetup.com/pt-BR/eugostododelphi/
Estamos contratando!
• Iniciando os meus trabalhos na TEx Tecnologia
• https://www.textecnologia.com.br
• https://jobs.solides.com/textecnologia/
Motivação
• As ferramentas de desenvolvimento, com suas bibliotecas e
frameworks, abstraem vários conceitos importantes e ainda bem que
é assim!
• Isso nos deixa alheios a esses conhecimentos que eventualmente nos
faz falta principalmente quando as coisas não funcionam direito.
• Daí a importância de nos aprofundarmos um pouco mais no tema
HTTP e REST e vermos como as coisas funcionam por “baixo do capô”.
Fontes do exemplo
• Os fontes do projeto que será apresentado está em:
https://github.com/ArrayOf/understanding_HTTP
Protocolo
• Na computação protocolo é uma convenção, ou seja, um conjunto de
regras bem definidas que possibilitam a conexão, comunicação e a
transferência de dados entre dois sistemas.
• Temos no nosso dia à dia o protocolo TCP/IP. Ela é onipresente e se
referem à dois protocolos:
• IP – que está na camada de rede
• TCP – que está na camada de transporte
• Sobre o protocolo TCP/IP trafegam os protocolos de aplicação que
possibilitam um software conversar com outro. Entre eles o nosso
HTTP.
REST
• “Um sistema complexo que funciona é, invariavelmente, considerado
como evoluído a partir de um simples que funcionava” - John Gall.
• REST não é protocolo de comunicação ou de aplicação.
• Mas sim um padrão de arquitetura que reaproveita conceitos do HTTP
e os estende.
• Um solução aderente ao padrão REST, independentemente da adoção
do protocolo HTTP, é dita como RESTful (com um “l” só, como em
beautiful)
REQUISIÇÃO
POST /teste HTTP/1.1#13#10
Host: localhost:8080#13#10
Content-Length: 20#13#10
#13#10
{“msg”: “Ola Mundo”}
Verbo
HTTP
Endereçamento
do Recurso
Versão do
Protocolo
Quebra
de Linha
Conteúdo
Linha
vazia
Cabeçalho
Request
Line
RESPOSTA
HTTP/1.1 200 OK#13#10
Server: Delphi#13#10
#13#10
Versão do
Protocolo Status Descrição
Quebra
de LinhaCabeçalho
Linha
vazia
Status
Line
Sem
conteúdo
REST: Verbo
• Na requisição HTTP é definido o verbo HTTP – que no REST será a
ação que será executada sobre o recurso
• Temos um conjunto limitado e bem definido de ações:
• GET: Recupera um item ou uma lista de itens
• POST: Solicita a criação de um novo item
• PUT: Solicita a modificação de um item já existente
• PATCH: Solicita a modificação parcial de um item já existente
• DELETE: Solicita a exclusão de um determinado item
• Existem outros verbos porém esses são os mais usuais equivalendo às
operações CRUD
REST: Recurso
• Na requisição também é definido o endereçamento do recurso que
será manipulado.
• Perceba que o que será feito já foi definido pelo verbo – aqui
definimos onde será feito
• Exemplos:
• GET /usuarios – Lista todos os usuários
• GET /usuarios/1234 – Recupera os dados do usuário de ID 1234
• POST /usuarios – Cria um novo usuário
• PUT /usuarios/1234 – Modifica os dados do usuário 1234
• DELETE /usuarios/1234 – Delete o usuário de ID 1234
REST: Parâmetros de execução
• Algumas operações precisam de parâmetros adicionais para serem executadas
corretamente.
• Chaves de acesso, paginação do resultado, filtro de dados são alguns exemplos.
• Os parâmetros podem ser passados da seguinte forma:
• Query string: Sequência de chave e valor na URL, após o sinal de interrogação e
separados por &
GET /usuarios?pagina=1&limite=10
• Cabeçalho: Sequência de chaves e valor no cabeçalho HTTP. Se não for um
cabeçalho padrão o ideal é iniciar por “X-”
X-Chave-Acesso: 1234567890
• Cookies: Uma forma de trafegar dados persistentes entre o cliente e o servidor.
Também vai no cabeçalho HTTP porém requer uma manipulação diferenciada
REST: Status HTTP
• Na resposta vêm um código de status que indica o resultado da
solicitação
• Existe uma tabela padrão porém – em termos de REST – ela pode ser
estendida para ter significados mais específicos
REST: Status HTTP
Sucesso:
• 200 – A solicitação foi atendida e possui conteúdo de retorno
• 201 – O recurso foi criado
• 202 – A tarefa foi aceita e está em processamento
• 204 – A solicitação foi atendida e não possui conteúdo de retorno
Erro do lado cliente:
• 400 – Erro genérico
• 401 – Não autorizado
• 403 – Acesso negado
• 404 – Recurso não encontrado
Erro do lado servidor:
• 500 – Erro genérico
• 502 – Não foi possível encaminhar a solicitação
• 504 – Tempo excedido
REST: Representação
• Os dados que trafegam entre cliente e servidor precisam ser
representados de alguma forma
• Trata-se da serialização e deserialização de dados
• Há vários formatos possíveis porém os mais usuais são XML e JSON
sendo o JSON o formato preferido em uma solução RESTful
• O cliente informa no cabeçalho Accept os formatos preferidos
• O servidor informa no cabeçalho Content-Type o formato da
informação
• application/json – application/xml – text/csv são alguns dos
valores possíveis
Resumo
• Vimos nesta palestra o quanto o HTTP é simples o que torna o REST
simples também.
• Trabalhamos com quatro aspectos: Operações, Endereçamento,
Status de Retorno e Representação.
• Há outros aspectos importantes porém abordamos os fundamentais.
• Visite: https://arrayof.io
• Participe: https://www.meetup.com/pt-BR/eugostododelphi/
• Trabalhe: https://jobs.solides.com/textecnologia/
Obrigado! Gracias! Thank you!
Mario Guedes | mario@arrayof.io

Mais conteúdo relacionado

Semelhante a Entendendo HTTP para entender o REST

Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Lucas Brasilino
 
Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a Internet
Ricardo Terra
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
Igor Santos
 
Rest
RestRest
Rest
JugVale
 
REST-fuuuu
REST-fuuuuREST-fuuuu
REST-fuuuu
Igor Santos
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
ThiagoFortes8
 
A Web é uma API
A Web é uma APIA Web é uma API
A Web é uma API
Osvaldo Santana Neto
 
REST and JEE
REST and JEEREST and JEE
REST and JEE
Rafael Nunes
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio Jug
Sergio Azevedo
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo http
Carlos Veiga
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
BrunoAlbuquerque864673
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
BrunoAlbuquerque864673
 
Aplicações web parte 1
Aplicações web parte 1Aplicações web parte 1
Aplicações web parte 1
Elaine Cecília Gatto
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
André Déo
 
Te aula1
Te aula1Te aula1
Te aula1
rafaeljrssg
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
Alvaro Viebrantz
 
[ATC] Testando sua API com HTTPARTY e Rodando em um CI
[ATC] Testando sua API com HTTPARTY e Rodando em um CI[ATC] Testando sua API com HTTPARTY e Rodando em um CI
[ATC] Testando sua API com HTTPARTY e Rodando em um CI
Nathanael Silva
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?
Luis Vendrame
 
Te servelts
Te serveltsTe servelts
Te servelts
rafaeljrssg
 
Webservices em PHP e a liberdade da Web
Webservices em PHP e a liberdade da WebWebservices em PHP e a liberdade da Web
Webservices em PHP e a liberdade da Web
Alexandre Andrade
 

Semelhante a Entendendo HTTP para entender o REST (20)

Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
 
Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a Internet
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
 
Rest
RestRest
Rest
 
REST-fuuuu
REST-fuuuuREST-fuuuu
REST-fuuuu
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
A Web é uma API
A Web é uma APIA Web é uma API
A Web é uma API
 
REST and JEE
REST and JEEREST and JEE
REST and JEE
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio Jug
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo http
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Aplicações web parte 1
Aplicações web parte 1Aplicações web parte 1
Aplicações web parte 1
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 
Te aula1
Te aula1Te aula1
Te aula1
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
 
[ATC] Testando sua API com HTTPARTY e Rodando em um CI
[ATC] Testando sua API com HTTPARTY e Rodando em um CI[ATC] Testando sua API com HTTPARTY e Rodando em um CI
[ATC] Testando sua API com HTTPARTY e Rodando em um CI
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?
 
Te servelts
Te serveltsTe servelts
Te servelts
 
Webservices em PHP e a liberdade da Web
Webservices em PHP e a liberdade da WebWebservices em PHP e a liberdade da Web
Webservices em PHP e a liberdade da Web
 

Entendendo HTTP para entender o REST

  • 1.
  • 2. Entendendo o HTTP para Entender o REST Mario Guedes | mario@arrayof.io
  • 3. Vídeo da apresentação • O vídeo da apresentação está em: https://youtu.be/x0HT3Dg53i4
  • 4. Olá! Aqui é Mario Guedes! • Artesão de Software desde 1999 • https://arrayof.io - mario@arrayof.io • https://eugostododelphi.dev • Participe do primeiro encontro presencial • https://www.meetup.com/pt-BR/eugostododelphi/
  • 5. Estamos contratando! • Iniciando os meus trabalhos na TEx Tecnologia • https://www.textecnologia.com.br • https://jobs.solides.com/textecnologia/
  • 6. Motivação • As ferramentas de desenvolvimento, com suas bibliotecas e frameworks, abstraem vários conceitos importantes e ainda bem que é assim! • Isso nos deixa alheios a esses conhecimentos que eventualmente nos faz falta principalmente quando as coisas não funcionam direito. • Daí a importância de nos aprofundarmos um pouco mais no tema HTTP e REST e vermos como as coisas funcionam por “baixo do capô”.
  • 7. Fontes do exemplo • Os fontes do projeto que será apresentado está em: https://github.com/ArrayOf/understanding_HTTP
  • 8. Protocolo • Na computação protocolo é uma convenção, ou seja, um conjunto de regras bem definidas que possibilitam a conexão, comunicação e a transferência de dados entre dois sistemas. • Temos no nosso dia à dia o protocolo TCP/IP. Ela é onipresente e se referem à dois protocolos: • IP – que está na camada de rede • TCP – que está na camada de transporte • Sobre o protocolo TCP/IP trafegam os protocolos de aplicação que possibilitam um software conversar com outro. Entre eles o nosso HTTP.
  • 9. REST • “Um sistema complexo que funciona é, invariavelmente, considerado como evoluído a partir de um simples que funcionava” - John Gall. • REST não é protocolo de comunicação ou de aplicação. • Mas sim um padrão de arquitetura que reaproveita conceitos do HTTP e os estende. • Um solução aderente ao padrão REST, independentemente da adoção do protocolo HTTP, é dita como RESTful (com um “l” só, como em beautiful)
  • 10. REQUISIÇÃO POST /teste HTTP/1.1#13#10 Host: localhost:8080#13#10 Content-Length: 20#13#10 #13#10 {“msg”: “Ola Mundo”} Verbo HTTP Endereçamento do Recurso Versão do Protocolo Quebra de Linha Conteúdo Linha vazia Cabeçalho Request Line
  • 11. RESPOSTA HTTP/1.1 200 OK#13#10 Server: Delphi#13#10 #13#10 Versão do Protocolo Status Descrição Quebra de LinhaCabeçalho Linha vazia Status Line Sem conteúdo
  • 12. REST: Verbo • Na requisição HTTP é definido o verbo HTTP – que no REST será a ação que será executada sobre o recurso • Temos um conjunto limitado e bem definido de ações: • GET: Recupera um item ou uma lista de itens • POST: Solicita a criação de um novo item • PUT: Solicita a modificação de um item já existente • PATCH: Solicita a modificação parcial de um item já existente • DELETE: Solicita a exclusão de um determinado item • Existem outros verbos porém esses são os mais usuais equivalendo às operações CRUD
  • 13. REST: Recurso • Na requisição também é definido o endereçamento do recurso que será manipulado. • Perceba que o que será feito já foi definido pelo verbo – aqui definimos onde será feito • Exemplos: • GET /usuarios – Lista todos os usuários • GET /usuarios/1234 – Recupera os dados do usuário de ID 1234 • POST /usuarios – Cria um novo usuário • PUT /usuarios/1234 – Modifica os dados do usuário 1234 • DELETE /usuarios/1234 – Delete o usuário de ID 1234
  • 14. REST: Parâmetros de execução • Algumas operações precisam de parâmetros adicionais para serem executadas corretamente. • Chaves de acesso, paginação do resultado, filtro de dados são alguns exemplos. • Os parâmetros podem ser passados da seguinte forma: • Query string: Sequência de chave e valor na URL, após o sinal de interrogação e separados por & GET /usuarios?pagina=1&limite=10 • Cabeçalho: Sequência de chaves e valor no cabeçalho HTTP. Se não for um cabeçalho padrão o ideal é iniciar por “X-” X-Chave-Acesso: 1234567890 • Cookies: Uma forma de trafegar dados persistentes entre o cliente e o servidor. Também vai no cabeçalho HTTP porém requer uma manipulação diferenciada
  • 15. REST: Status HTTP • Na resposta vêm um código de status que indica o resultado da solicitação • Existe uma tabela padrão porém – em termos de REST – ela pode ser estendida para ter significados mais específicos
  • 16. REST: Status HTTP Sucesso: • 200 – A solicitação foi atendida e possui conteúdo de retorno • 201 – O recurso foi criado • 202 – A tarefa foi aceita e está em processamento • 204 – A solicitação foi atendida e não possui conteúdo de retorno Erro do lado cliente: • 400 – Erro genérico • 401 – Não autorizado • 403 – Acesso negado • 404 – Recurso não encontrado Erro do lado servidor: • 500 – Erro genérico • 502 – Não foi possível encaminhar a solicitação • 504 – Tempo excedido
  • 17. REST: Representação • Os dados que trafegam entre cliente e servidor precisam ser representados de alguma forma • Trata-se da serialização e deserialização de dados • Há vários formatos possíveis porém os mais usuais são XML e JSON sendo o JSON o formato preferido em uma solução RESTful • O cliente informa no cabeçalho Accept os formatos preferidos • O servidor informa no cabeçalho Content-Type o formato da informação • application/json – application/xml – text/csv são alguns dos valores possíveis
  • 18. Resumo • Vimos nesta palestra o quanto o HTTP é simples o que torna o REST simples também. • Trabalhamos com quatro aspectos: Operações, Endereçamento, Status de Retorno e Representação. • Há outros aspectos importantes porém abordamos os fundamentais. • Visite: https://arrayof.io • Participe: https://www.meetup.com/pt-BR/eugostododelphi/ • Trabalhe: https://jobs.solides.com/textecnologia/
  • 19.
  • 20. Obrigado! Gracias! Thank you! Mario Guedes | mario@arrayof.io