SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
HTTP:
A Base do Desenvolvimento Web
Alexandre Gomes Gaigalas




1   Fórum Internacional do Software Livre – 30 de Junho de 2011
Alexandre Gomes Gaigalas
                ●
                    PHP 5
                ●
                    OOP
                ●
                    REST
                ●
                    Linked Data
2
Respect
●
    Um conjunto de componentes PHP
    ●
        Config – Configuração e Injeção de Dependências
    ●
        Relational – Mapeamento Objeto-Relacional
    ●
        Rest – Rotas e Controladores RESTful
    ●
        Validation – Validação e Asserção

●
    http://respect.github.com

3
Nessa Apresentação
        (HTTP: A Base do Desenvolvimento Web)



    Visão Geral – O Básico

    Anti-Patterns – O que não fazer

    Patterns – O que fazer


4
Hyper Text Transfer Protocol
●
    Também é um padrão do W3C.
●
    Criado há mais de 10 anos.
●
    Não tem frescura com implementações. Todos os
    navegadores respeitam.
●
    Define toda a arquitetura da web.

                                        RFC 2616
5
Protocolo




    Um conjunto de regras de comunicação.




6
HTTP: Cliente-Servidor clássico

                   Cliente

      Requisição              Resposta



                   Servidor


7
POST e GET




    São dois métodos HTTP.




8
<form method=”POST”> na Prática
●
    Os parâmetros não aparecem na URL
●
    No PHP: $_POST
●
    É possível upload de arquivos
●
    Pede confirmação de re-envio quando atualiza a
    página



9
<form method=”GET”> na Prática
●
     Os parâmetros são enviados pela URL
●
     No PHP: $_GET
●
     Não é possível upload de arquivos
●
     Não pede confirmação de re-envio quando
     atualiza a página



10
POST na Teoria

●
     Método HTTP para enviar dados
●
     $_POST são dados enviados
●
     Formulários de inserção, atualização,
     processamento remoto, etc



11
GET na Teoria

●
     Método HTTP para obter dados
●
     $_GET são parâmetros de pesquisa
●
     Formulários de busca, filtros de relatórios, etc.




12
Outros métodos

●
     DELETE para excluir dados
●
     PUT para atualizar/inserir dados em um local
     específico
●
     $_SERVER['REQUEST_METHOD']



13
Uma Requisição HTTP



     GET /index.html HTTP/1.1
     Host: example.com
     rn
     rn

14
Uma Requisição HTTP

     Método   Recurso   Protocolo

     GET /index.html HTTP/1.1
     Host: example.com
     rn
             Linha em
     rn     Branco   Cabeçalho

15
Uma Requisição HTTP
●
     Método: $_SERVER['REQUEST_METHOD']
●
     Recurso: $_SERVER['REQUEST_URI']
●
     Protocolo: $_SERVER['SERVER_PROTOCOL']
●
     Cabeçalhos: $_SERVER['HTTP_*']


                                      RFC 3875
16
Acessando Cabeçalhos HTTP

●
     Host: $_SERVER['HTTP_HOST']
●
     User-Agent: $_SERVER['HTTP_USER_AGENT']
●
     X-FooBar: $_SERVER['HTTP_X_FOOBAR']



                                   RFC 3875
17
Uma Resposta HTTP


     HTTP/1.1 200 Ok
     Date: Mon, 22 November...
     Content-Length: 3
     Content-type: text/html
     rn
     Oi!
18
Uma Resposta HTTP
     Protocolo   Status   Cabeçalhos

     HTTP/1.1 200 Ok
     Date: Mon, 22 November...
     Content-Length: 3
     Content-type: text/html
     rn
              Nova Linha
     Oi!
19
                 Corpo
Content-Length

●
     “Oi!” = 3
●
     “Hello World” = 11
●
     “” = 0
●
     O PHP calcula automaticamente!



20
Content-Type
●
     text/html
●
     text/xml
●
     application/json
●
     text/plain
●
     image/jpeg


21
Códigos de Status
●
     1xx – Informativo
●
     2xx – Sucesso!
●
     3xx – Redirecionamento
●
     4xx – Erro do cliente
●
     5xx – Erro do servidor


22
Códigos de Status famosos
●    404 Not Found
●    503 Service Unavailable
●    403 Forbidden
●
     401 Unauthorized
●
     301 Redirect

23
Códigos de Status no PHP (envio)




24
Códigos de Status no AJAX (client)




25
Códigos de Status no jQuery (client)




26
Códigos de Sucesso
●
     201 Created – Sua requisição gerou algo no
     servidor, aqui está ele.
●
     202 Accepted – Sua requisição foi aceita e o
     servidor está gerando algo.
●
     204 No Content – Deu tudo certo, nada pra exibir



27
Códigos de Redirecionamento
●    300 Multiple Choices – Achei várias coisas, escolha uma.

●    301 Redirect – Isso que você procura mudou pra sempre de lugar.

●    302 Found – Isso que você procura no momento está aqui.

●    303 See Other – Sua requisição foi aceita, olha ela aqui.

●    304 Not Modified – Nada novo no servidor, nem se preocupe.

●    307 Temporary Redirect – O que você procura está temporariamente aqui.




28
Códigos de Erro do Cliente

●
     400 Bad Request – Não consigo entender o que você pediu.
●
     401 Unauthorized – Você não tem permissão pra isso.
●
     403 Forbidden – Ninguém tem permissão pra isso.
●
     404 Not Found – Não achei.
●
     405 Method Not Allowed – Método não permitido.



29
Códigos de Erro do Servidor

●
     500 Internal Server Error – Alguma merda aconteceu.

●
     501 Not Implemented – Esse servidor não entende esse método.

●
     502 Bad Gateway – Eu contava com outro servidor que falhou.

●
     503 Service Unavailable – Tô sobrecarregado, espera um pouco.




30
Negociação de Conteúdo




31
Negociação de Conteúdo




32
Cache




33
Cache




34
Anti-Patterns




     Práticas ruins que se tornaram populares.




35
Recursos e Métodos
/usuarios/editar/alganet    POST /usuarios/alganet

/usuarios/excluir           DELETE /usuarios/alganet

/usuarios/inserir           PUT /usuarios

/usuarios/listar            GET /usuarios

/usuarios/buscar?nome=abc   GET /usuarios?nome=abc




36
Query String
?acao=editar               /usuarios?grupo=adm

?pagina=contato.php        /posts?categoria=php

?erro=1                    /cidades?estado=RS

?redir=http://...          /veiculos?tipo=passeio

?titulo=Me+Ajudem+SOS      /cafe?tamanho=duplo


37
Separação vs Negociação
             de Conteúdo
http://exemplo.com           http://exemplo.com

http://api.exemplo.com       http://exemplo.com

http://mobile.exemplo.com    http://exemplo.com

https://seguro.exemplo.com   https://exemplo.com




38
Cache


●
     Expiração no passsado   ●
                                 Expiração real
●
     ?rand=8754              ●
                                 ETags




39
Dados do Cabeçalho no Corpo

●
     {“erro”: “notfound”}     ●
                                  Status: 404 Not Found
●
     {“redir”:”http://...”}   ●
                                  Status: 301 Redirect
●
     {“ok”: true}             ●
                                  Status: 201 Created




40
NÃO USEM
ANTI-PATTERNS
 POR FAVOR




41
Patterns
POST-redirect-GET
●
     POST /usuarios (Dados: username=alganet)
     ●
         303 See Other /usuario/alganet

●
     GET /usuarios/alganet
     ●
         201 Created




43
DELETE
●
     DELETE /usuarios/alganet
     ●
         205 Reset Content              APIs


●
     POST /usuarios/alganet (Dados: removido=1)
     ●
         200 OK                      Navegador


44
POST com dados inválidos
●
     POST /usuarios (Dados: username=$%$%)
     ●
         400 Bad Request




45
GET para URLs amigáveis
●
     GET /usuarios?username=alganet
     ●
         301 See Other /usuarios/alganet

●
     GET /usuarios/alganet
     ●
         200 Ok




46
Negociação de Conteúdo
●
     GET /usuarios/alganet (Accept: text/xml)
     ●
         303 See Other /usuarios/alganet.xml




47
Negociação de Conteúdo
●
     GET /usuarios/alganet (Accept: text/xml)
     ●
         200 Ok /usuarios/alganet
                      (Content-Location: /usuarios/alganet.xml)




48
Cache
●
     GET /usuarios/alganet
     ●
         200 Ok (ETag: 2fe450ed30acb)

●
     GET /usuarios/alganet (If-None-Match: 2fe450ed30acb)
     ●
         304 Not Modified




49
Nessa Apresentação
         (HTTP: A Base do Desenvolvimento Web)



     Visão Geral – O Básico

     Anti-Patterns – O que não fazer

     Patterns – O que fazer


50
Obrigado!
       NÃO USEM
     ANTI-PATTERNS
      POR FAVOR


 http://about.me/alganet
     http://slideshare.net/alganet
51

Mais conteúdo relacionado

Mais procurados

Protocolo http
Protocolo httpProtocolo http
Protocolo httpBiel2013a
 
Protocolos de comunicação HTTP
Protocolos de comunicação HTTPProtocolos de comunicação HTTP
Protocolos de comunicação HTTPTuesla Santos
 
Conexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPConexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPIgor Lopes
 
Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)elliando dias
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)Bruno Pedro
 
Curso de Node.js e MongoDB - 11
Curso de Node.js e MongoDB - 11Curso de Node.js e MongoDB - 11
Curso de Node.js e MongoDB - 11Luiz Duarte
 
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
 
Introdução Programação de Aplicações Web
Introdução Programação de Aplicações WebIntrodução Programação de Aplicações Web
Introdução Programação de Aplicações WebDiogo Benicá
 
pfSense - Proxy com arquivo arquivo pac e wpad
pfSense - Proxy com arquivo arquivo pac e wpadpfSense - Proxy com arquivo arquivo pac e wpad
pfSense - Proxy com arquivo arquivo pac e wpadCavalcante Treinamentos
 
Metodologias de Programação IV - Aula 2, Secção 2 - Sequência pedido-resposta...
Metodologias de Programação IV - Aula 2, Secção 2 - Sequência pedido-resposta...Metodologias de Programação IV - Aula 2, Secção 2 - Sequência pedido-resposta...
Metodologias de Programação IV - Aula 2, Secção 2 - Sequência pedido-resposta...Leonel Morgado
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no androidAlexandre Antunes
 
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPMetodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPLeonel Morgado
 
Protocolos HTTP e HTTPS
Protocolos HTTP e HTTPSProtocolos HTTP e HTTPS
Protocolos HTTP e HTTPSTrabalhosCVIGR
 
Protocolos HTTP e HTTPS
Protocolos HTTP e HTTPSProtocolos HTTP e HTTPS
Protocolos HTTP e HTTPSTrabalhosCVIGR
 

Mais procurados (20)

Protocolo http
Protocolo httpProtocolo http
Protocolo http
 
Protocolos de comunicação HTTP
Protocolos de comunicação HTTPProtocolos de comunicação HTTP
Protocolos de comunicação HTTP
 
Conexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHPConexões eficientes em banco de dados com PHP
Conexões eficientes em banco de dados com PHP
 
Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)Hyper Text Transfer Protocol (HTTP)
Hyper Text Transfer Protocol (HTTP)
 
Http 2.0
Http 2.0Http 2.0
Http 2.0
 
Web Services (in portuguese)
Web Services (in portuguese)Web Services (in portuguese)
Web Services (in portuguese)
 
Curso de Node.js e MongoDB - 11
Curso de Node.js e MongoDB - 11Curso de Node.js e MongoDB - 11
Curso de Node.js e MongoDB - 11
 
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
 
Introdução Programação de Aplicações Web
Introdução Programação de Aplicações WebIntrodução Programação de Aplicações Web
Introdução Programação de Aplicações Web
 
Como funciona a internet
Como funciona a internetComo funciona a internet
Como funciona a internet
 
Curso de proxy
Curso de proxyCurso de proxy
Curso de proxy
 
pfSense - Proxy com arquivo arquivo pac e wpad
pfSense - Proxy com arquivo arquivo pac e wpadpfSense - Proxy com arquivo arquivo pac e wpad
pfSense - Proxy com arquivo arquivo pac e wpad
 
Metodologias de Programação IV - Aula 2, Secção 2 - Sequência pedido-resposta...
Metodologias de Programação IV - Aula 2, Secção 2 - Sequência pedido-resposta...Metodologias de Programação IV - Aula 2, Secção 2 - Sequência pedido-resposta...
Metodologias de Programação IV - Aula 2, Secção 2 - Sequência pedido-resposta...
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTPMetodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
Metodologias de Programação IV - Aula 3, Secção 1 - Cabeçalhos do protocolo HTTP
 
#3 Instalação MongoDB
#3   Instalação MongoDB  #3   Instalação MongoDB
#3 Instalação MongoDB
 
Protocolos HTTP e HTTPS
Protocolos HTTP e HTTPSProtocolos HTTP e HTTPS
Protocolos HTTP e HTTPS
 
Protocolos HTTP e HTTPS
Protocolos HTTP e HTTPSProtocolos HTTP e HTTPS
Protocolos HTTP e HTTPS
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Proxychains HowTo
Proxychains HowToProxychains HowTo
Proxychains HowTo
 

Destaque

Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...Leonel Morgado
 
http https Professor Marlon Sales
http https Professor Marlon Saleshttp https Professor Marlon Sales
http https Professor Marlon Salesmarloninternet
 
Introdução à Sistemas de Informação
Introdução à Sistemas de InformaçãoIntrodução à Sistemas de Informação
Introdução à Sistemas de InformaçãoÁlvaro Farias Pinheiro
 
Redes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasRedes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasMarcelo Charan
 
Etica Profissional E Codigo Deontologico
Etica Profissional E Codigo DeontologicoEtica Profissional E Codigo Deontologico
Etica Profissional E Codigo Deontologicotozefialho
 
HTTPS, SSL/TLS - Porque você deve usá-los sempre
HTTPS, SSL/TLS - Porque você deve usá-los sempreHTTPS, SSL/TLS - Porque você deve usá-los sempre
HTTPS, SSL/TLS - Porque você deve usá-los sempreVinícius Camacho
 
Palestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredPalestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredJúlio de Lima
 
Varrendo APIs REST em Larga Escala utilizando PHP
Varrendo APIs REST em Larga Escala utilizando PHPVarrendo APIs REST em Larga Escala utilizando PHP
Varrendo APIs REST em Larga Escala utilizando PHPAlexandre Gaigalas
 
APIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a pontaAPIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a pontaJosé Vahl
 
Junho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em pythonJunho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em pythonGrupo de Testes Carioca
 
Django REST Framework - Mauro de Carvalho - Tryolabs 2014
Django REST Framework - Mauro de Carvalho - Tryolabs 2014Django REST Framework - Mauro de Carvalho - Tryolabs 2014
Django REST Framework - Mauro de Carvalho - Tryolabs 2014Tryolabs
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com DjangoMarinho Brandão
 
APIs Rest(Ful): como fazer, por Alex Piaz
APIs Rest(Ful): como fazer, por Alex PiazAPIs Rest(Ful): como fazer, por Alex Piaz
APIs Rest(Ful): como fazer, por Alex PiaziMasters
 
Loopback - Desenvolvimento de APIs REST para aplicativos móveis
Loopback - Desenvolvimento de APIs REST para aplicativos móveisLoopback - Desenvolvimento de APIs REST para aplicativos móveis
Loopback - Desenvolvimento de APIs REST para aplicativos móveisjuscyllan
 
Descobrindo APIs REST
Descobrindo APIs RESTDescobrindo APIs REST
Descobrindo APIs RESTGuilherme
 
A Navegação na WWW
A Navegação na WWWA Navegação na WWW
A Navegação na WWWanarocha8d
 
REST: Faça o Serviço Direito
REST: Faça o Serviço DireitoREST: Faça o Serviço Direito
REST: Faça o Serviço DireitoAlexandre Gaigalas
 
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)Júlio de Lima
 

Destaque (20)

Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
Metodologias de Programação IV - Aula 2, Secção 3 - Terminologia do protocolo...
 
http https Professor Marlon Sales
http https Professor Marlon Saleshttp https Professor Marlon Sales
http https Professor Marlon Sales
 
Introdução à Sistemas de Informação
Introdução à Sistemas de InformaçãoIntrodução à Sistemas de Informação
Introdução à Sistemas de Informação
 
Redes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasRedes I - Conceitos e Tecnologias
Redes I - Conceitos e Tecnologias
 
Etica Profissional E Codigo Deontologico
Etica Profissional E Codigo DeontologicoEtica Profissional E Codigo Deontologico
Etica Profissional E Codigo Deontologico
 
HTTPS, SSL/TLS - Porque você deve usá-los sempre
HTTPS, SSL/TLS - Porque você deve usá-los sempreHTTPS, SSL/TLS - Porque você deve usá-los sempre
HTTPS, SSL/TLS - Porque você deve usá-los sempre
 
Palestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredPalestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-Assured
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Varrendo APIs REST em Larga Escala utilizando PHP
Varrendo APIs REST em Larga Escala utilizando PHPVarrendo APIs REST em Larga Escala utilizando PHP
Varrendo APIs REST em Larga Escala utilizando PHP
 
APIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a pontaAPIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a ponta
 
Junho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em pythonJunho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em python
 
Django REST Framework - Mauro de Carvalho - Tryolabs 2014
Django REST Framework - Mauro de Carvalho - Tryolabs 2014Django REST Framework - Mauro de Carvalho - Tryolabs 2014
Django REST Framework - Mauro de Carvalho - Tryolabs 2014
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com Django
 
APIs Rest(Ful): como fazer, por Alex Piaz
APIs Rest(Ful): como fazer, por Alex PiazAPIs Rest(Ful): como fazer, por Alex Piaz
APIs Rest(Ful): como fazer, por Alex Piaz
 
Loopback - Desenvolvimento de APIs REST para aplicativos móveis
Loopback - Desenvolvimento de APIs REST para aplicativos móveisLoopback - Desenvolvimento de APIs REST para aplicativos móveis
Loopback - Desenvolvimento de APIs REST para aplicativos móveis
 
Descobrindo APIs REST
Descobrindo APIs RESTDescobrindo APIs REST
Descobrindo APIs REST
 
Internet
InternetInternet
Internet
 
A Navegação na WWW
A Navegação na WWWA Navegação na WWW
A Navegação na WWW
 
REST: Faça o Serviço Direito
REST: Faça o Serviço DireitoREST: Faça o Serviço Direito
REST: Faça o Serviço Direito
 
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
 

Semelhante a HTTP Fundamentos e Boas Práticas

REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaSensedia
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugSergio Azevedo
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]Filipe Ximenes
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Gabriel Machado
 
[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
 
Atendendo Milhares de Requisições com o Play Framework 2 - v2
Atendendo Milhares de Requisições com o Play Framework 2 - v2Atendendo Milhares de Requisições com o Play Framework 2 - v2
Atendendo Milhares de Requisições com o Play Framework 2 - v2Paulo Siqueira
 
Python Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasPython Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasRuda Filgueiras
 
REST - The right way
REST - The right wayREST - The right way
REST - The right waysantosluis87
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
O que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seoO que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seointrofini
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]Filipe Ximenes
 
Apis palestra 7º JUG Vale
Apis palestra 7º JUG Vale Apis palestra 7º JUG Vale
Apis palestra 7º JUG Vale Pedro Hos
 

Semelhante a HTTP Fundamentos e Boas Práticas (20)

REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha Básica
 
Do Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio JugDo Rest Ao Restfull - Rio Jug
Do Rest Ao Restfull - Rio Jug
 
Design de APIs REST
Design de APIs RESTDesign de APIs REST
Design de APIs REST
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
[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
 
Atendendo Milhares de Requisições com o Play Framework 2 - v2
Atendendo Milhares de Requisições com o Play Framework 2 - v2Atendendo Milhares de Requisições com o Play Framework 2 - v2
Atendendo Milhares de Requisições com o Play Framework 2 - v2
 
O get and post para etico hacker
O get and post para etico hackerO get and post para etico hacker
O get and post para etico hacker
 
Python Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasPython Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhas
 
REST - The right way
REST - The right wayREST - The right way
REST - The right way
 
Framework web 02 - 2016
Framework web 02 - 2016Framework web 02 - 2016
Framework web 02 - 2016
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
Aplicações web parte 1
Aplicações web parte 1Aplicações web parte 1
Aplicações web parte 1
 
O que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seoO que todos os developers devem saber sobre seo
O que todos os developers devem saber sobre seo
 
Testando jwebserver
Testando jwebserver Testando jwebserver
Testando jwebserver
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]
 
Aula parte 1 de JSF 2.2
Aula parte 1 de JSF 2.2Aula parte 1 de JSF 2.2
Aula parte 1 de JSF 2.2
 
Apis palestra 7º JUG Vale
Apis palestra 7º JUG Vale Apis palestra 7º JUG Vale
Apis palestra 7º JUG Vale
 

Mais de Alexandre Gaigalas

Domine Validação de Dados em 45min
Domine Validação de Dados em 45minDomine Validação de Dados em 45min
Domine Validação de Dados em 45minAlexandre Gaigalas
 
REST: Faça o Serviço Direito - TDC Goiânia
REST: Faça o Serviço Direito - TDC GoiâniaREST: Faça o Serviço Direito - TDC Goiânia
REST: Faça o Serviço Direito - TDC GoiâniaAlexandre Gaigalas
 
Mágica com Manipulação de Imagens - TDC 2011 Goiânia
Mágica com Manipulação de Imagens - TDC 2011 GoiâniaMágica com Manipulação de Imagens - TDC 2011 Goiânia
Mágica com Manipulação de Imagens - TDC 2011 GoiâniaAlexandre Gaigalas
 
assertTrue($tdd) - Latinoware 2011
assertTrue($tdd) - Latinoware 2011assertTrue($tdd) - Latinoware 2011
assertTrue($tdd) - Latinoware 2011Alexandre Gaigalas
 
REST: Faça o Serviço Direito
REST: Faça o Serviço DireitoREST: Faça o Serviço Direito
REST: Faça o Serviço DireitoAlexandre Gaigalas
 
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011Alexandre Gaigalas
 

Mais de Alexandre Gaigalas (8)

Domine Validação de Dados em 45min
Domine Validação de Dados em 45minDomine Validação de Dados em 45min
Domine Validação de Dados em 45min
 
As Mudanças Culturais do PHP
As Mudanças Culturais do PHPAs Mudanças Culturais do PHP
As Mudanças Culturais do PHP
 
PHP Maroto
PHP MarotoPHP Maroto
PHP Maroto
 
REST: Faça o Serviço Direito - TDC Goiânia
REST: Faça o Serviço Direito - TDC GoiâniaREST: Faça o Serviço Direito - TDC Goiânia
REST: Faça o Serviço Direito - TDC Goiânia
 
Mágica com Manipulação de Imagens - TDC 2011 Goiânia
Mágica com Manipulação de Imagens - TDC 2011 GoiâniaMágica com Manipulação de Imagens - TDC 2011 Goiânia
Mágica com Manipulação de Imagens - TDC 2011 Goiânia
 
assertTrue($tdd) - Latinoware 2011
assertTrue($tdd) - Latinoware 2011assertTrue($tdd) - Latinoware 2011
assertTrue($tdd) - Latinoware 2011
 
REST: Faça o Serviço Direito
REST: Faça o Serviço DireitoREST: Faça o Serviço Direito
REST: Faça o Serviço Direito
 
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
 

HTTP Fundamentos e Boas Práticas

  • 1. HTTP: A Base do Desenvolvimento Web Alexandre Gomes Gaigalas 1 Fórum Internacional do Software Livre – 30 de Junho de 2011
  • 2. Alexandre Gomes Gaigalas ● PHP 5 ● OOP ● REST ● Linked Data 2
  • 3. Respect ● Um conjunto de componentes PHP ● Config – Configuração e Injeção de Dependências ● Relational – Mapeamento Objeto-Relacional ● Rest – Rotas e Controladores RESTful ● Validation – Validação e Asserção ● http://respect.github.com 3
  • 4. Nessa Apresentação (HTTP: A Base do Desenvolvimento Web) Visão Geral – O Básico Anti-Patterns – O que não fazer Patterns – O que fazer 4
  • 5. Hyper Text Transfer Protocol ● Também é um padrão do W3C. ● Criado há mais de 10 anos. ● Não tem frescura com implementações. Todos os navegadores respeitam. ● Define toda a arquitetura da web. RFC 2616 5
  • 6. Protocolo Um conjunto de regras de comunicação. 6
  • 7. HTTP: Cliente-Servidor clássico Cliente Requisição Resposta Servidor 7
  • 8. POST e GET São dois métodos HTTP. 8
  • 9. <form method=”POST”> na Prática ● Os parâmetros não aparecem na URL ● No PHP: $_POST ● É possível upload de arquivos ● Pede confirmação de re-envio quando atualiza a página 9
  • 10. <form method=”GET”> na Prática ● Os parâmetros são enviados pela URL ● No PHP: $_GET ● Não é possível upload de arquivos ● Não pede confirmação de re-envio quando atualiza a página 10
  • 11. POST na Teoria ● Método HTTP para enviar dados ● $_POST são dados enviados ● Formulários de inserção, atualização, processamento remoto, etc 11
  • 12. GET na Teoria ● Método HTTP para obter dados ● $_GET são parâmetros de pesquisa ● Formulários de busca, filtros de relatórios, etc. 12
  • 13. Outros métodos ● DELETE para excluir dados ● PUT para atualizar/inserir dados em um local específico ● $_SERVER['REQUEST_METHOD'] 13
  • 14. Uma Requisição HTTP GET /index.html HTTP/1.1 Host: example.com rn rn 14
  • 15. Uma Requisição HTTP Método Recurso Protocolo GET /index.html HTTP/1.1 Host: example.com rn Linha em rn Branco Cabeçalho 15
  • 16. Uma Requisição HTTP ● Método: $_SERVER['REQUEST_METHOD'] ● Recurso: $_SERVER['REQUEST_URI'] ● Protocolo: $_SERVER['SERVER_PROTOCOL'] ● Cabeçalhos: $_SERVER['HTTP_*'] RFC 3875 16
  • 17. Acessando Cabeçalhos HTTP ● Host: $_SERVER['HTTP_HOST'] ● User-Agent: $_SERVER['HTTP_USER_AGENT'] ● X-FooBar: $_SERVER['HTTP_X_FOOBAR'] RFC 3875 17
  • 18. Uma Resposta HTTP HTTP/1.1 200 Ok Date: Mon, 22 November... Content-Length: 3 Content-type: text/html rn Oi! 18
  • 19. Uma Resposta HTTP Protocolo Status Cabeçalhos HTTP/1.1 200 Ok Date: Mon, 22 November... Content-Length: 3 Content-type: text/html rn Nova Linha Oi! 19 Corpo
  • 20. Content-Length ● “Oi!” = 3 ● “Hello World” = 11 ● “” = 0 ● O PHP calcula automaticamente! 20
  • 21. Content-Type ● text/html ● text/xml ● application/json ● text/plain ● image/jpeg 21
  • 22. Códigos de Status ● 1xx – Informativo ● 2xx – Sucesso! ● 3xx – Redirecionamento ● 4xx – Erro do cliente ● 5xx – Erro do servidor 22
  • 23. Códigos de Status famosos ● 404 Not Found ● 503 Service Unavailable ● 403 Forbidden ● 401 Unauthorized ● 301 Redirect 23
  • 24. Códigos de Status no PHP (envio) 24
  • 25. Códigos de Status no AJAX (client) 25
  • 26. Códigos de Status no jQuery (client) 26
  • 27. Códigos de Sucesso ● 201 Created – Sua requisição gerou algo no servidor, aqui está ele. ● 202 Accepted – Sua requisição foi aceita e o servidor está gerando algo. ● 204 No Content – Deu tudo certo, nada pra exibir 27
  • 28. Códigos de Redirecionamento ● 300 Multiple Choices – Achei várias coisas, escolha uma. ● 301 Redirect – Isso que você procura mudou pra sempre de lugar. ● 302 Found – Isso que você procura no momento está aqui. ● 303 See Other – Sua requisição foi aceita, olha ela aqui. ● 304 Not Modified – Nada novo no servidor, nem se preocupe. ● 307 Temporary Redirect – O que você procura está temporariamente aqui. 28
  • 29. Códigos de Erro do Cliente ● 400 Bad Request – Não consigo entender o que você pediu. ● 401 Unauthorized – Você não tem permissão pra isso. ● 403 Forbidden – Ninguém tem permissão pra isso. ● 404 Not Found – Não achei. ● 405 Method Not Allowed – Método não permitido. 29
  • 30. Códigos de Erro do Servidor ● 500 Internal Server Error – Alguma merda aconteceu. ● 501 Not Implemented – Esse servidor não entende esse método. ● 502 Bad Gateway – Eu contava com outro servidor que falhou. ● 503 Service Unavailable – Tô sobrecarregado, espera um pouco. 30
  • 35. Anti-Patterns Práticas ruins que se tornaram populares. 35
  • 36. Recursos e Métodos /usuarios/editar/alganet POST /usuarios/alganet /usuarios/excluir DELETE /usuarios/alganet /usuarios/inserir PUT /usuarios /usuarios/listar GET /usuarios /usuarios/buscar?nome=abc GET /usuarios?nome=abc 36
  • 37. Query String ?acao=editar /usuarios?grupo=adm ?pagina=contato.php /posts?categoria=php ?erro=1 /cidades?estado=RS ?redir=http://... /veiculos?tipo=passeio ?titulo=Me+Ajudem+SOS /cafe?tamanho=duplo 37
  • 38. Separação vs Negociação de Conteúdo http://exemplo.com http://exemplo.com http://api.exemplo.com http://exemplo.com http://mobile.exemplo.com http://exemplo.com https://seguro.exemplo.com https://exemplo.com 38
  • 39. Cache ● Expiração no passsado ● Expiração real ● ?rand=8754 ● ETags 39
  • 40. Dados do Cabeçalho no Corpo ● {“erro”: “notfound”} ● Status: 404 Not Found ● {“redir”:”http://...”} ● Status: 301 Redirect ● {“ok”: true} ● Status: 201 Created 40
  • 43. POST-redirect-GET ● POST /usuarios (Dados: username=alganet) ● 303 See Other /usuario/alganet ● GET /usuarios/alganet ● 201 Created 43
  • 44. DELETE ● DELETE /usuarios/alganet ● 205 Reset Content APIs ● POST /usuarios/alganet (Dados: removido=1) ● 200 OK Navegador 44
  • 45. POST com dados inválidos ● POST /usuarios (Dados: username=$%$%) ● 400 Bad Request 45
  • 46. GET para URLs amigáveis ● GET /usuarios?username=alganet ● 301 See Other /usuarios/alganet ● GET /usuarios/alganet ● 200 Ok 46
  • 47. Negociação de Conteúdo ● GET /usuarios/alganet (Accept: text/xml) ● 303 See Other /usuarios/alganet.xml 47
  • 48. Negociação de Conteúdo ● GET /usuarios/alganet (Accept: text/xml) ● 200 Ok /usuarios/alganet (Content-Location: /usuarios/alganet.xml) 48
  • 49. Cache ● GET /usuarios/alganet ● 200 Ok (ETag: 2fe450ed30acb) ● GET /usuarios/alganet (If-None-Match: 2fe450ed30acb) ● 304 Not Modified 49
  • 50. Nessa Apresentação (HTTP: A Base do Desenvolvimento Web) Visão Geral – O Básico Anti-Patterns – O que não fazer Patterns – O que fazer 50
  • 51. Obrigado! NÃO USEM ANTI-PATTERNS POR FAVOR http://about.me/alganet http://slideshare.net/alganet 51