Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Seminário PHP 2012 - Melhores Práticas em WebAPIs para mobile

Seminário PHP 2012 - Melhores Práticas em WebAPIs para mobile

Como desenvolver uma WebAPI que não gaste toda a banda, bateria e paciência do usuário?
Conheça técnicas e ferramentas que mudarão sua maneira de programar.
Saiba porque o MVC não atende mais às necessidades atuais dos sistemas móveis.

Ricardo Coelho

June 03, 2012
Tweet

More Decks by Ricardo Coelho

Other Decks in Programming

Transcript

  1. @ramcoelho
    Melhores Práticas em
    WebAPIs para mobile

    View Slide

  2. @ramcoelho
    Apresentação

    Ciência da Computação (UFMA)

    Pós em Docência Superior

    Fundador PHP-Maranhão

    Representa o Maranhão em eventos nacionais e no PHPBC

    Professor de Programação Web / Mobile Web e WebAPIs

    Auditor certificado ISO/IEC 27001:2006 e perito forense NCCI

    CEO Nexy - Auditoria de segurança, Tecnologia Financeira,
    Soluções para Varejo, implementando SaaS com [email protected]

    View Slide

  3. @ramcoelho
    Mobile Web
    Desenvolvimento Web e
    Desenvolvimento Mobile
    são artes gêmeas

    View Slide

  4. @ramcoelho
    Exemplos API

    View Slide

  5. @ramcoelho
    Princípios (LRP)
    Leve
    Troque apenas dados
    necessários (up e down).
    Economize banda, ou seja,
    dinheiro do usuário.

    View Slide

  6. @ramcoelho
    Princípios (LRP)
    Rápido
    Baixa latência. Resposta imediata.
    Economize paciência do usuário

    View Slide

  7. @ramcoelho
    Princípios (LRP)
    Pronto
    Entregue respostas no formato final
    que o app precisa. Evite
    processar no dispositivo.
    Economize bateria!

    View Slide

  8. @ramcoelho
    Já se foi o tempo do MVC

    Compreende apenas uma aplicação;

    Módulos são gambiarras que criam elefantes
    brancos em MVC;

    É complexo manter a estrutura com Ajax;

    Model-View-Controller-Controller-UI; ou

    MVC2UI ao resgate!

    View Slide

  9. @ramcoelho
    MVC2UI

    View Slide

  10. @ramcoelho
    MVC2UI

    View Slide

  11. @ramcoelho
    MVC2UI

    View Slide

  12. @ramcoelho
    MVC2UI na Amazon

    Todos os times devem expor seus dados e
    funcionalidades via Interfaces de Serviço;

    Todos os times devem se comunicar através
    destas Interfaces;

    Não haverá outra forma permitida de comunicação
    interprocessos;

    Nada de links diretos, nada de leituras de banco,
    memória compartilhada ou back-doors;

    View Slide

  13. @ramcoelho
    MVC2UI na Amazon

    O único meio de comunicação permitido é através
    das interfaces de serviço pela rede;

    Todas as interfaces de serviço, SEM
    EXCEÇẪO, devem ser desenhadas desde o
    início para externalização. Ou seja, o time deve
    planejar a abertura da interface para
    desenvolvedores do mundo exterior. Sem
    exceções.

    View Slide

  14. @ramcoelho
    Métodos

    RESTful Webservices

    JSON vs XML

    WebApp vs App

    OAuth

    Comunicação Anyway® vs Otimizada

    View Slide

  15. @ramcoelho
    Métodos

    RESTful Webservices

    JSON vs XML

    WebApp vs App

    OAuth

    Comunicação Anyway® vs Otimizada

    View Slide

  16. @ramcoelho
    Métodos

    RESTful Webservices

    JSON vs XML

    WebApp vs App

    OAuth

    Comunicação Anyway® vs Otimizada
    Don't go for the SOAP
    It's a trap!

    View Slide

  17. @ramcoelho
    Métodos

    RESTful Webservices

    JSON vs XML

    WebApp vs App

    OAuth

    Comunicação Anyway® vs Otimizada

    View Slide

  18. @ramcoelho
    Métodos

    RESTful Webservices

    JSON vs XML

    WebApp vs App

    OAuth

    Comunicação Anyway® vs Otimizada

    View Slide

  19. @ramcoelho
    Métodos

    RESTful Webservices

    JSON vs XML

    WebApp vs App

    OAuth

    Comunicação Anyway® vs Otimizada

    View Slide

  20. @ramcoelho
    Ferramentas

    Respect Framework (github.com/respect)

    Validation:
    //From 1 to 15 non­whitespace
    alphanumeric characters
    $validUsername = v::alnum()
    ­>noWhitespace()
    ­>length(1,15);
    $validUsername­>validate('alganet'); //true

    View Slide

  21. @ramcoelho
    Ferramentas

    Respect Framework (github.com/respect)

    Rest:
    use Respect\Rest\Router;
    $r3 = new Router;
    $r3­>get('/users/*/lists/*', function($user, $list) {
    return "List {$list} from user {$user}";
    });

    View Slide

  22. @ramcoelho
    Ferramentas

    Respect Framework

    Frapi
    – Interface Administrativa;
    – Criação de WS via Wizards;
    – Autenticação;
    – Documentação;
    – Load Balancing;
    +14h00

    View Slide

  23. @ramcoelho
    Ferramentas

    Respect Framework

    Frapi

    Grs (github.com/ramcoelho)
    Front Controller: definido no .htaccess ou sites-enabled/ (vhost)
    RewriteEngine On
    RewriteBase /context
    RewriteCond %{REQUEST_FILENAME} !­f
    RewriteCond %{REQUEST_FILENAME} !­d
    RewriteRule . /context/index.php [L]
    +17h00
    +14h00

    View Slide

  24. @ramcoelho
    Ferramentas

    Respect Framework

    Frapi

    Grs (github.com/ramcoelho)
    Front Controller: definido no .htaccess ou sites-enabled/ (vhost)
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !­f
    RewriteCond %{REQUEST_FILENAME} !­d
    RewriteRule . index.php [L]
    +17h00
    +14h00

    View Slide

  25. @ramcoelho
    Ferramentas

    Respect Framework

    Frapi

    Grs (github.com/ramcoelho)
    index.php
    require 'Grs/Grs.php';
    $grs = new Grs();
    $grs­>setModelPath('model');
    $grs­>dispatch();
    +17h00
    +14h00

    View Slide

  26. @ramcoelho
    Ferramentas

    Respect Framework

    Frapi

    Grs (github.com/ramcoelho)

    http://servidor/app/item/listar/a1/b2/c3.json
    +17h00
    +14h00

    View Slide

  27. @ramcoelho
    http://servidor/app/item/listar/a1/b2/c3.json
    .htaccess
    RewriteEngine On
    RewriteBase /app
    RewriteCond %{REQUEST_FILENAME} !­f
    RewriteCond %{REQUEST_FILENAME} !­d
    RewriteRule . /app/index.php [L]

    View Slide

  28. @ramcoelho
    http://servidor/app/item/listar/a1/b2/c3.json
    index.php
    require 'Grs/Grs.php';
    $grs = new Grs();
    $grs­>setModelPath('models');
    $grs­>dispatch();

    View Slide

  29. @ramcoelho
    http://servidor/app/item/listar/a1/b2/c3.json
    item.php
    class Item
    {
    function listar($params)
    {
    return($params);
    }
    }
    $params = [a1, b2, c3];

    View Slide

  30. @ramcoelho
    http://servidor/app/item/listar/a1/b2/c3.json
    item.php
    class Item
    {
    function listar($params)
    {
    return($params);
    }
    }

    View Slide

  31. @ramcoelho
    Ferramentas

    Respect Framework

    Frapi

    Grs (github.com/ramcoelho)
    http://server/app/item/listar/a1/b2/b3.txt
    a:3:{i:0;s:2:"a1";i:1;s:2:"b2";i:2;s:2:"c3";}
    http://server/app/item/listar/a1/b2/b3.json
    [“a1”,”b2”,”c3”]
    +17h00
    +14h00

    View Slide

  32. @ramcoelho
    Ferramentas

    Respect Framework

    Frapi

    Grs

    No dispositivo

    org.json.JSONObject, org.json.JSONTokener

    Jackson, GSON

    View Slide

  33. @ramcoelho
    Case Veritas

    View Slide

  34. @ramcoelho
    Obrigado!

    View Slide

  35. @ramcoelho
    Dúvidas
    ? ?
    ?
    ?
    ?
    ?
    ?
    ?
    ?
    ? ?
    ?
    ?

    View Slide