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.

Avatar for Ricardo Coelho

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