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

Api usando Silex.pdf

Elton Minetto
November 01, 2012
1.5k

Api usando Silex.pdf

Elton Minetto

November 01, 2012
Tweet

Transcript

  1. Elton Minetto Graduado/pós-graduado em Ciência da Computação Desenvolvedor desde 1997

    Professor desde 2004 Autor de dois livros sobre PHP Sócio da Coderockr Instrutor do Code Squad
  2. API

  3. "[] conjunto de rotinas e padrões estabelecidos por um software

    para a utilização das suas funcionalidades por aplicativos que não pretendem envolver-se em detalhes da implementação do software, mas apenas usar seus serviços []" Wikipedia
  4. Micro-framework para PHP 5.3 (e superiores) construído com base nos

    componentes do Symfony e inspirado no Sinatra (ruby)
  5. Criando o composer.json { "require": { "silex/silex": "1.0.*" }, "minimum-stability":

    "dev" } Instalando as dependências curl -s http://getcomposer.org/installer | php php composer.phar install
  6. <?php use Silex\Application; //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();
  7. $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);
  8. //Adicionar os novos namespaces no começo do arquivo use Symfony\Component\HttpFoundation\Response;

    use Symfony\Component\HttpFoundation\Request; ... //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'); });
  9. $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); } });
  10. $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 do Doctrine 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); });
  11. $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); });
  12. $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); });