HTTP: A Base do Desenvolvimento Web - FISL 12

1,901 views

Published on

Uma apresentação sobre o protocolo que fornece a base do desenvolvimento sobre a web, suas vantagens, características e más práticas que podem ser evitadas.

Published in: Technology

HTTP: A Base do Desenvolvimento Web - FISL 12

  1. 1. HTTP:A Base do Desenvolvimento WebAlexandre Gomes Gaigalas1 Fórum Internacional do Software Livre – 30 de Junho de 2011
  2. 2. Alexandre Gomes Gaigalas ● PHP 5 ● OOP ● REST ● Linked Data2
  3. 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.com3
  4. 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 fazer4
  5. 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 26165
  6. 6. Protocolo Um conjunto de regras de comunicação.6
  7. 7. HTTP: Cliente-Servidor clássico Cliente Requisição Resposta Servidor7
  8. 8. POST e GET São dois métodos HTTP.8
  9. 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ágina9
  10. 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ágina10
  11. 11. POST na Teoria● Método HTTP para enviar dados● $_POST são dados enviados● Formulários de inserção, atualização, processamento remoto, etc11
  12. 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. 13. Outros métodos● DELETE para excluir dados● PUT para atualizar/inserir dados em um local específico● $_SERVER[REQUEST_METHOD]13
  14. 14. Uma Requisição HTTP GET /index.html HTTP/1.1 Host: example.com rn rn14
  15. 15. Uma Requisição HTTP Método Recurso Protocolo GET /index.html HTTP/1.1 Host: example.com rn Linha em rn Branco Cabeçalho15
  16. 16. Uma Requisição HTTP● Método: $_SERVER[REQUEST_METHOD]● Recurso: $_SERVER[REQUEST_URI]● Protocolo: $_SERVER[SERVER_PROTOCOL]● Cabeçalhos: $_SERVER[HTTP_*] RFC 387516
  17. 17. Acessando Cabeçalhos HTTP● Host: $_SERVER[HTTP_HOST]● User-Agent: $_SERVER[HTTP_USER_AGENT]● X-FooBar: $_SERVER[HTTP_X_FOOBAR] RFC 387517
  18. 18. Uma Resposta HTTP HTTP/1.1 200 Ok Date: Mon, 22 November... Content-Length: 3 Content-type: text/html rn Oi!18
  19. 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. 20. Content-Length● “Oi!” = 3● “Hello World” = 11● “” = 0● O PHP calcula automaticamente!20
  21. 21. Content-Type● text/html● text/xml● application/json● text/plain● image/jpeg21
  22. 22. Códigos de Status● 1xx – Informativo● 2xx – Sucesso!● 3xx – Redirecionamento● 4xx – Erro do cliente● 5xx – Erro do servidor22
  23. 23. Códigos de Status famosos● 404 Not Found● 503 Service Unavailable● 403 Forbidden● 401 Unauthorized● 301 Redirect23
  24. 24. Códigos de Status no PHP (envio)24
  25. 25. Códigos de Status no AJAX (client)25
  26. 26. Códigos de Status no jQuery (client)26
  27. 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 exibir27
  28. 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. 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. 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
  31. 31. Negociação de Conteúdo31
  32. 32. Negociação de Conteúdo32
  33. 33. Cache33
  34. 34. Cache34
  35. 35. Anti-Patterns Práticas ruins que se tornaram populares.35
  36. 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=abc36
  37. 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=duplo37
  38. 38. Separação vs Negociação de Conteúdohttp://exemplo.com http://exemplo.comhttp://api.exemplo.com http://exemplo.comhttp://mobile.exemplo.com http://exemplo.comhttps://seguro.exemplo.com https://exemplo.com38
  39. 39. Cache● Expiração no passsado ● Expiração real● ?rand=8754 ● ETags39
  40. 40. Dados do Cabeçalho no Corpo● {“erro”: “notfound”} ● Status: 404 Not Found● {“redir”:”http://...”} ● Status: 301 Redirect● {“ok”: true} ● Status: 201 Created40
  41. 41. NÃO USEMANTI-PATTERNS POR FAVOR41
  42. 42. Patterns
  43. 43. POST-redirect-GET● POST /usuarios (Dados: username=alganet) ● 303 See Other /usuario/alganet● GET /usuarios/alganet ● 201 Created43
  44. 44. DELETE● DELETE /usuarios/alganet ● 205 Reset Content APIs● POST /usuarios/alganet (Dados: removido=1) ● 200 OK Navegador44
  45. 45. POST com dados inválidos● POST /usuarios (Dados: username=$%$%) ● 400 Bad Request45
  46. 46. GET para URLs amigáveis● GET /usuarios?username=alganet ● 301 See Other /usuarios/alganet● GET /usuarios/alganet ● 200 Ok46
  47. 47. Negociação de Conteúdo● GET /usuarios/alganet (Accept: text/xml) ● 303 See Other /usuarios/alganet.xml47
  48. 48. Negociação de Conteúdo● GET /usuarios/alganet (Accept: text/xml) ● 200 Ok /usuarios/alganet (Content-Location: /usuarios/alganet.xml)48
  49. 49. Cache● GET /usuarios/alganet ● 200 Ok (ETag: 2fe450ed30acb)● GET /usuarios/alganet (If-None-Match: 2fe450ed30acb) ● 304 Not Modified49
  50. 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 fazer50
  51. 51. Obrigado! NÃO USEM ANTI-PATTERNS POR FAVOR http://about.me/alganet http://slideshare.net/alganet51

×