Api usando Silex

2.084 visualizações

Publicada em

Apresentando o micro-framework Silex

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Api usando Silex

  1. 1. Criando APIsusando o micro-framework Silex
  2. 2. Elton Minetto Graduado/pós-graduado em Ciência da Computação Desenvolvedor desde 1997 Professor desde 2004 Autor de dois livros sobre PHPSócio da Coderockr Instrutor do Code Squad
  3. 3. API
  4. 4. O que é?
  5. 5. "[] conjunto de rotinas e padrões estabelecidos por umsoftware para a utilização das suas funcionalidades poraplicativos que não pretendem envolver-se em detalhesda implementação do software, mas apenas usar seusserviços []" Wikipedia
  6. 6. Porque criar uma API?
  7. 7. Múltiplas interfaces (web, mobile, CLI)
  8. 8. Integração com outros serviços da sua empresa Venda de recursos (Amazon, Parse, Pusher, Filepicker, etc)
  9. 9. Exemplo
  10. 10. RestBeer
  11. 11. API de informações sobre cerveja http://restbeer.com/cervejas/ http://restbeer.com/estilos/ http://restbeer.com/cervejas/Guinness http://restbeer.com/cervejas/Heineken http://restbeer.com/estilos/Pilsen http://restbeer.com/estilos/Stout
  12. 12. Silex
  13. 13. Micro-framework para PHP 5.3 (esuperiores) construído com base noscomponentes do Symfony e inspirado noSinatra (ruby)
  14. 14. Instalando
  15. 15. Criando o composer.json{ "require": { "silex/silex": "1.0.*" }, "minimum-stability": "dev"}Instalando as dependênciascurl -s http://getcomposer.org/installer | phpphp composer.phar install
  16. 16. Mostrando as cervejas
  17. 17. <?phpuse SilexApplication;//loader do Composer$loader = require_once __DIR__./vendor/autoload.php;$app = new Application();$cervejas = array( marcas => array(Heineken, Guinness, Skol, Colorado), estilos => array(Pilsen , Stout));$app->get(/cervejas, function () use ($cervejas) { return implode(,, $cervejas[marcas]);});$app->get(/estilos, function () use ($cervejas) { return implode(,, $cervejas[estilos]);});$app->run();
  18. 18. Testando com oservidor do PHP 5.4
  19. 19. php -S localhost:8080
  20. 20. Mostrando uma em específico
  21. 21. $app->get(/cervejas/{id}, function ($id) use ($cervejas) { if ($id == null) { return implode(,, $cervejas[marcas]); } $key = array_search($id, $cervejas[marcas]); if ($key === null) { return Não encontrada; } return $cervejas[marcas][$key];})->value(id, null);
  22. 22. Formatando o resultado
  23. 23. //Adicionar os novos namespaces no começo do arquivouse SymfonyComponentHttpFoundationResponse;use SymfonyComponentHttpFoundationRequest;...//alterar o /cervejas$app->get(/cervejas/{id}, function ($id) use ($cervejas) { if ($id == null) { $result = implode(,, $cervejas[marcas]); return new Response (json_encode($result), 200); } $key = array_search($id, $cervejas[marcas]); if ($key === null) { return new Response (json_encode(Não encontrada), 404); } return new Response (json_encode($cervejas[marcas][$key]),200);})->value(id, null);//adiciona o cabeçalho após todas as requisições$app->after(function (Request $request, Response $response) { $response->headers->set(Content-Type, text/json);});
  24. 24. Autenticando
  25. 25. $app->before(function (Request $request) use ($app) { if( ! $request->headers->has(authorization)){ return new Response(Unauthorized, 401); } require_once configs/clients.php; if (!in_array($request->headers->get(authorization),array_keys($clients))) { return new Response(Unauthorized, 401); }});
  26. 26. Adicionando uma Cerveja
  27. 27. $app->post(/cervejas, function (Request $request) use ($app) { //pega os dados if (!$data = $request->get(cerveja)) { return new Response(Faltam parâmetros, 400); } //Persiste na base de dados (considerando uma entidade doDoctrine nesse exemplo) $cerveja = new Cerveja(); $cerveja->nome = $data[nome]; $cerveja->estilo = $data[estilo]; $cerveja->save(); //redireciona para a nova cerveja return $app->redirect(/cervejas/ . $data[nome], 201);});
  28. 28. Alterando uma Cerveja
  29. 29. $app->put(/cervejas/{id}, function (Request $request, $id) use($app) { //pega os dados if (!$data = $request->get(cerveja)) { return new Response(Faltam parâmetros, 400); } //busca da base de dados if (!$cerveja = $app[db]->find($id)) { return new Response(Não encontrada, 404); } //Persiste na base de dados $cerveja->nome = $data[nome]; $cerveja->estilo = $data[estilo]; $cerveja->save(); return new Response(Cerveja atualizada, 200);});
  30. 30. Excluindo uma Cerveja
  31. 31. $app->delete(/cervejas/{id}, function (Request $request, $id) use($app) { //busca da base de dados if (!$cerveja = $app[db]->find($id)) { return new Response(Não encontrada, 404); } $cerveja->delete(); return new Response(Cerveja removida, 200);});
  32. 32. Referências
  33. 33. Exemplo completo(com integração com o Docrine e usando SQLite) https://github.com/eminetto/restbeer
  34. 34. http://www.slideshare.net/hhamon/silex-meets-soap-resthttp://www.slideshare.net/Alganet/rest-faa-o-servio-direitohttp://silex.sensiolabs.orghttps://github.com/eminetto/silex-samplehttps://github.com/Coderockr/SOA-Serverhttps://github.com/Coderockr/SOA-Client
  35. 35. Contato
  36. 36. @eminettohttp://www.eltonminetto.net http://coderockr.com http://code-squad.com

×