SlideShare a Scribd company logo
1 of 51
Download to read 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

More Related Content

What's hot

Protocolo http
Protocolo httpProtocolo http
Protocolo http
Biel2013a
 
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
 
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 android
Alexandre 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 HTTP
Leonel Morgado
 

What's hot (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
 

Viewers also liked

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
 
Etica Profissional E Codigo Deontologico
Etica Profissional E Codigo DeontologicoEtica Profissional E Codigo Deontologico
Etica Profissional E Codigo Deontologico
tozefialho
 
A Navegação na WWW
A Navegação na WWWA Navegação na WWW
A Navegação na WWW
anarocha8d
 

Viewers also liked (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)
 

Similar to HTTP: A Base do Desenvolvimento Web - FISL 12

Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
jesuinoPower
 
REST - The right way
REST - The right wayREST - The right way
REST - The right way
santosluis87
 
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
introfini
 

Similar to HTTP: A Base do Desenvolvimento Web - FISL 12 (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
 

More from 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 45min
Alexandre Gaigalas
 

More from 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
 

Recently uploaded

Recently uploaded (8)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

HTTP: A Base do Desenvolvimento Web - FISL 12

  • 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