SlideShare uma empresa Scribd logo
1 de 20
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 o HTTP e 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 VarnishLucas Brasilino
 
Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a InternetRicardo 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
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugSergio Azevedo
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo httpCarlos 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.pdfBrunoAlbuquerque864673
 
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.pdfBrunoAlbuquerque864673
 
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 ZabbixAndré Déo
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIAlvaro 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 CINathanael Silva
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?Luis Vendrame
 
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 WebAlexandre Andrade
 

Semelhante a Entendendo o HTTP e 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
 

Mais de Mario Guedes

O que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitO que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitMario Guedes
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISMario Guedes
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumMario Guedes
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - CookbookMario Guedes
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsMario Guedes
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!Mario Guedes
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsMario Guedes
 
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Mario Guedes
 
Escalabilidade com Redis
Escalabilidade com Redis Escalabilidade com Redis
Escalabilidade com Redis Mario Guedes
 
Escalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisEscalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisMario Guedes
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Mario Guedes
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Mario Guedes
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiMario Guedes
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Mario Guedes
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiMario Guedes
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Mario Guedes
 
BOT: Conversando com o seu sistema
BOT: Conversando com o seu sistemaBOT: Conversando com o seu sistema
BOT: Conversando com o seu sistemaMario Guedes
 
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Mario Guedes
 
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosExtreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosMario Guedes
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBMario Guedes
 

Mais de Mario Guedes (20)

O que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitO que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST Summit
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDIS
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da Ethereum
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - Cookbook
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
 
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!
 
Escalabilidade com Redis
Escalabilidade com Redis Escalabilidade com Redis
Escalabilidade com Redis
 
Escalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisEscalando o backend com NGINX e Redis
Escalando o backend com NGINX e Redis
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?
 
BOT: Conversando com o seu sistema
BOT: Conversando com o seu sistemaBOT: Conversando com o seu sistema
BOT: Conversando com o seu sistema
 
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
 
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosExtreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
 

Entendendo o HTTP e 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