1
HTTP: A Base do Desenvolvimento WebAlexandre Gomes Gaigalas
Fórum Internacional do Software Livre – 30 de Junho de 2011
2
Alexandre Gomes Gaigalas
● PHP 5
● OOP
● REST
● Linked Data
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
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
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
6
Protocolo
Um conjunto de regras de comunicação.
7
HTTP: Cliente-Servidor clássico
Cliente
Servidor
Requisição Resposta
8
POST e GET
São dois métodos HTTP.
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
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
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
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.
13
Outros métodos
● DELETE para excluir dados
● PUT para atualizar/inserir dados em um local
específico
● $_SERVER['REQUEST_METHOD']
14
Uma Requisição HTTP
GET /index.html HTTP/1.1Host: example.com\r\n\r\n
15
Uma Requisição HTTP
GET /index.html HTTP/1.1Host: example.com\r\n\r\n
Método Recurso
Cabeçalho
Protocolo
Linha emBranco
16
Uma Requisição HTTP
● Método: $_SERVER['REQUEST_METHOD']
● Recurso: $_SERVER['REQUEST_URI']
● Protocolo: $_SERVER['SERVER_PROTOCOL']
● Cabeçalhos: $_SERVER['HTTP_*']
RFC 3875
17
Acessando Cabeçalhos HTTP
● Host: $_SERVER['HTTP_HOST']
● User-Agent: $_SERVER['HTTP_USER_AGENT']
● X-FooBar: $_SERVER['HTTP_X_FOOBAR']
RFC 3875
18
Uma Resposta HTTP
HTTP/1.1 200 OkDate: Mon, 22 November...Content-Length: 3Content-type: text/html\r\nOi!
19
Uma Resposta HTTP
HTTP/1.1 200 OkDate: Mon, 22 November...Content-Length: 3Content-type: text/html\r\nOi!
Protocolo Status
Nova Linha
Cabeçalhos
Corpo
20
Content-Length
● “Oi!” = 3
● “Hello World” = 11
● “” = 0
● O PHP calcula automaticamente!
21
Content-Type
● text/html
● text/xml
● application/json
● text/plain
● image/jpeg
22
Códigos de Status
● 1xx – Informativo
● 2xx – Sucesso!
● 3xx – Redirecionamento
● 4xx – Erro do cliente
● 5xx – Erro do servidor
23
Códigos de Status famosos
● 404 Not Found
● 503 Service Unavailable
● 403 Forbidden
● 401 Unauthorized
● 301 Redirect
24
Códigos de Status no PHP (envio)
25
Códigos de Status no AJAX (client)
26
Códigos de Status no jQuery (client)
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
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.
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.
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.
31
Negociação de Conteúdo
32
Negociação de Conteúdo
33
Cache
34
Cache
35
Anti-Patterns
Práticas ruins que se tornaram populares.
36
Recursos e Métodos
/usuarios/editar/alganet
/usuarios/excluir
/usuarios/inserir
/usuarios/listar
/usuarios/buscar?nome=abc
POST /usuarios/alganet
DELETE /usuarios/alganet
PUT /usuarios
GET /usuarios
GET /usuarios?nome=abc
37
Query String
?acao=editar
?pagina=contato.php
?erro=1
?redir=http://...
?titulo=Me+Ajudem+SOS
/usuarios?grupo=adm
/posts?categoria=php
/cidades?estado=RS
/veiculos?tipo=passeio
/cafe?tamanho=duplo
38
Separação vs Negociaçãode Conteúdo
http://exemplo.com
http://api.exemplo.com
http://mobile.exemplo.com
https://seguro.exemplo.com
http://exemplo.com
http://exemplo.com
http://exemplo.com
https://exemplo.com
39
Cache
● Expiração no passsado
● ?rand=8754
● Expiração real
● ETags
40
Dados do Cabeçalho no Corpo
● {“erro”: “notfound”}
● {“redir”:”http://...”}
● {“ok”: true}
● Status: 404 Not Found
● Status: 301 Redirect
● Status: 201 Created
41
NÃO USEM ANTI-PATTERNS
POR FAVOR
Patterns
43
POST-redirect-GET
● POST /usuarios (Dados: username=alganet)
● 303 See Other /usuario/alganet
● GET /usuarios/alganet
● 201 Created
44
DELETE
● DELETE /usuarios/alganet
● 205 Reset Content
● POST /usuarios/alganet (Dados: removido=1)
● 200 OK Navegador
APIs
45
POST com dados inválidos
● POST /usuarios (Dados: username=$%$%)
● 400 Bad Request
46
GET para URLs amigáveis
● GET /usuarios?username=alganet
● 301 See Other /usuarios/alganet
● GET /usuarios/alganet
● 200 Ok
47
Negociação de Conteúdo
● GET /usuarios/alganet (Accept: text/xml)
● 303 See Other /usuarios/alganet.xml
48
Negociação de Conteúdo
● GET /usuarios/alganet (Accept: text/xml)
● 200 Ok /usuarios/alganet
(Content-Location: /usuarios/alganet.xml)
49
Cache
● GET /usuarios/alganet
● 200 Ok (ETag: 2fe450ed30acb)
● GET /usuarios/alganet (If-None-Match: 2fe450ed30acb)
● 304 Not Modified
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
51
NÃO USEM ANTI-PATTERNS
POR FAVOR
Obrigado!
http://about.me/alganet http://slideshare.net/alganet
Recommended