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

HTTP: A Base do Desenvolvimento Web - FISL 12

  • 1.
    HTTP: A Base doDesenvolvimento 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 TransferProtocol ● 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”> naPrá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”> naPrá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 Statusfamosos ● 404 Not Found ● 503 Service Unavailable ● 403 Forbidden ● 401 Unauthorized ● 301 Redirect 23
  • 24.
    Códigos de Statusno PHP (envio) 24
  • 25.
    Códigos de Statusno AJAX (client) 25
  • 26.
    Códigos de Statusno 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 Errodo 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 Errodo 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
  • 31.
  • 32.
  • 33.
  • 34.
  • 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çalhono Corpo ● {“erro”: “notfound”} ● Status: 404 Not Found ● {“redir”:”http://...”} ● Status: 301 Redirect ● {“ok”: true} ● Status: 201 Created 40
  • 41.
  • 42.
  • 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 dadosinválidos ● POST /usuarios (Dados: username=$%$%) ● 400 Bad Request 45
  • 46.
    GET para URLsamigá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