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

Seminário PHP 2012 - Melhores Práticas em WebAP...

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 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 PHP@FOSS
  2. @ramcoelho Princípios (LRP) Leve Troque apenas dados necessários (up e

    down). Economize banda, ou seja, dinheiro do usuário.
  3. @ramcoelho Princípios (LRP) Pronto Entregue respostas no formato final que

    o app precisa. Evite processar no dispositivo. Economize bateria!
  4. @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!
  5. @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;
  6. @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.
  7. @ramcoelho Métodos • RESTful Webservices • JSON vs XML •

    WebApp vs App • OAuth • Comunicação Anyway® vs Otimizada
  8. @ramcoelho Métodos • RESTful Webservices • JSON vs XML •

    WebApp vs App • OAuth • Comunicação Anyway® vs Otimizada
  9. @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!
  10. @ramcoelho Métodos • RESTful Webservices • JSON vs XML •

    WebApp vs App • OAuth • Comunicação Anyway® vs Otimizada
  11. @ramcoelho Métodos • RESTful Webservices • JSON vs XML •

    WebApp vs App • OAuth • Comunicação Anyway® vs Otimizada
  12. @ramcoelho Métodos • RESTful Webservices • JSON vs XML •

    WebApp vs App • OAuth • Comunicação Anyway® vs Otimizada
  13. @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
  14. @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}"; });
  15. @ramcoelho Ferramentas • Respect Framework • Frapi – Interface Administrativa;

    – Criação de WS via Wizards; – Autenticação; – Documentação; – Load Balancing; +14h00
  16. @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
  17. @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
  18. @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
  19. @ramcoelho Ferramentas • Respect Framework • Frapi • Grs (github.com/ramcoelho)

    • http://servidor/app/item/listar/a1/b2/c3.json +17h00 +14h00
  20. @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
  21. @ramcoelho Ferramentas • Respect Framework • Frapi • Grs •

    No dispositivo • org.json.JSONObject, org.json.JSONTokener • Jackson, GSON