Criando APIsusando o micro-framework        Silex
Elton Minetto              Graduado/pós-graduado em Ciência da Computação                        Desenvolvedor desde 1997 ...
API
O que é?
"[] conjunto de rotinas e padrões estabelecidos por umsoftware para a utilização das suas funcionalidades poraplicativos q...
Porque criar uma     API?
Múltiplas interfaces (web, mobile, CLI)
Integração com outros serviços da sua              empresa Venda de recursos (Amazon, Parse, Pusher,               Filepic...
Exemplo
RestBeer
API de informações sobre cerveja       http://restbeer.com/cervejas/        http://restbeer.com/estilos/  http://restbeer....
Silex
Micro-framework para PHP 5.3 (esuperiores) construído com base noscomponentes do Symfony e inspirado noSinatra (ruby)
Instalando
Criando o composer.json{    "require": {        "silex/silex": "1.0.*"    },    "minimum-stability": "dev"}Instalando as d...
Mostrando as  cervejas
<?phpuse SilexApplication;//loader do Composer$loader = require_once __DIR__./vendor/autoload.php;$app = new Application()...
Testando com oservidor do PHP 5.4
php -S localhost:8080
Mostrando uma em   específico
$app->get(/cervejas/{id}, function ($id) use ($cervejas) {    if ($id == null) {       return implode(,, $cervejas[marcas]...
Formatando o  resultado
//Adicionar os novos namespaces no começo do arquivouse SymfonyComponentHttpFoundationResponse;use SymfonyComponentHttpFou...
Autenticando
$app->before(function (Request $request) use ($app) {    if( ! $request->headers->has(authorization)){        return new R...
Adicionando uma     Cerveja
$app->post(/cervejas, function (Request $request) use ($app) {    //pega os dados    if (!$data = $request->get(cerveja)) ...
Alterando uma    Cerveja
$app->put(/cervejas/{id}, function (Request $request, $id) use($app) {    //pega os dados    if (!$data = $request->get(ce...
Excluindo uma   Cerveja
$app->delete(/cervejas/{id}, function (Request $request, $id) use($app) {   //busca da base de dados    if (!$cerveja = $a...
Referências
Exemplo completo(com integração com o Docrine e usando SQLite)    https://github.com/eminetto/restbeer
http://www.slideshare.net/hhamon/silex-meets-soap-resthttp://www.slideshare.net/Alganet/rest-faa-o-servio-direitohttp://si...
Contato
@eminettohttp://www.eltonminetto.net    http://coderockr.com   http://code-squad.com
Api usando Silex
Próximos SlideShares
Carregando em…5
×

Api usando Silex

1.942 visualizações

Publicada em

Apresentando o micro-framework Silex

Publicada em: Tecnologia
0 comentários
15 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.942
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
34
Comentários
0
Gostaram
15
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

×