Este documento apresenta como criar APIs usando o micro-framework PHP Silex. Ele explica o que é uma API e por que criá-las, demonstra um exemplo simples de API de cervejas e mostra como implementar recursos como listar, buscar, criar, atualizar e deletar itens usando Silex.
2. 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
5. "[] 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
12. 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
24. //Adicionar os novos namespaces no começo do arquivo
use 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');
});
28. $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);
});
30. $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);
});
32. $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);
});