HTTP: A Base do Desenvolvimento Web - FISL 12

Preview:

DESCRIPTION

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.

Citation preview

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