Olá, tudo bem?
Seja bem vindo a essa pequena série de artigos onde vamos construir uma pequena API utilizando o Symfony, em sua versão 3.4. Apesar de já termos a versão 4 do Symfony, a versão 3.4 participa da mesma filosofia e ainda assim nos permite utilizar o Symfony Flex.
Para este artigo, é importante que você conheça os conceitos básicos de uma aplicação Symfony 3.
Iniciando aplicação
Vamos dar o start em nossa aplicação. Para isso, utilizaremos o symfony installer em nosso terminal. Inicie sua aplicação executando o comando:
symfony new api 3.4
Com isso o installer irá baixar e iniciar nossa aplicação na pasta api, e utilizará a versão 3.4 neste momento.
Configurando nosso banco
Para iniciarmos a configuração do nosso banco, vamos alterar nosso app/config/parameters.yml, adicionando as configurações de nossa base. O meu ficou da seguinte forma:
# This file is auto-generated during the composer install parameters: database_host: 127.0.0.1 database_port: null database_name: api_sf database_user: root database_password: null mailer_transport: smtp mailer_host: 127.0.0.1 mailer_user: null mailer_password: null secret: 625576ecbfa57b333e69cfcaa029acfe0d61d9c2
- Código embedado GIST: https://gist.github.com/NandoKstroNet/d1a6ea6175c262e5700731c2963cccf6#file-parameters-yml
O nome do meu banco será api_sf, com user root e senha nulas, no meu caso. Neste caso, o driver default é MySql, banco utilizado neste tutorial.
Para gerarmos nosso banco, basta irmos em nosso terminal e executarmos:
bin/console doctrine:database:create
Bundle API
Irei gerar um bundle para comportar nossa API nesse momento. Veja o vídeo abaixo onde mostro como você pode gerar um novo bundle:
O nome do meu bundle será: APIBundle. Não vou criar ele com intuito de compartilha-lo, por isso, na primeira opção, digito no.
Veja abaixo:
O target folder, do meu Bundle, é a pasta src e a configuração é annotation!
É preciso registrar o bundle em nosso composer.json, basta adiciona-lo na chave autoload como mostro abaixo:
{ "autoload": { "psr-4": { "AppBundle\\": "src/AppBundle", "APIBundle\\": "src/APIBundle" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] } }
- Código embedado GIST: https://gist.github.com/NandoKstroNet/43d4bfb5f0986dcfdc74e1c72d78418e#file-composer-json
Acima, mostro somente a chave autoload. Basta adicionar somente a linha 5 acima e executar um composer dump para regerarmos o autoload.
Linha adicionada ao composer.json:
“APIBundle\\”: “src/APIBundle”
O Symfony configurará tudo para nós, somente a adição do namespace do Bundle que não será carregada no composer.json, por isso realizamos a configuração manualmente.
Gerado nosso bundle, precisamos fazer uma pequena alteração em nosso arquivo de rotas. Ao gerar o bundle nossas rotas foram configuradas, por annotations, apontando para nosso bundle APIBundle.
O que faremos agora é alterar o prefix, apontado para esse bundle. Então de /, mudarei para /api e modificarei o retorno gerado pelas actions, convertendo tudo para json.
Veja abaixo no app/config/routing.yml:
api: resource: "@APIBundle/Controller/" type: annotation prefix: /api defaults: _format: json app: resource: '@AppBundle/Controller/' type: annotation
Código embedado GIST: https://gist.github.com/NandoKstroNet/37fd39a4d4f71c0d3d3520fd98f2615a#file-routing-yml
Primeira Execução no Browser
Para concluirmos este artigo, vamos realizar um pequeno retorno em nosso controller principal, dentro de nosso bundle. O controller DefaultController foi gerado e setado com a rota raiz, por meio de annotations.
Vamos retornar um JsonResponse com um pequeno array. Veja abaixo o arquivo src/APIBundle/Controller/DefaultController:
<?php namespace APIBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\JsonResponse; class DefaultController extends Controller { /** * @Route("/") */ public function indexAction() { return new JsonResponse(['msg' => 'Serie Symfony 3.4 API']); } }
- Código embedado GIST: https://gist.github.com/NandoKstroNet/b771a0ad3d88cbfc249f6e767a22110f#file-defaultcontroller-php
O código acima não tem muito mistério, neste momento simplesmente retornamos um JsonResponse que converterá nosso array em um json e retornará isso no browser para nós.
Cabe lembrar que as actions no Symfony devem retornar sempre um objeto response, seja ele do tipo que for.
Com isso, podemos levantar nosso server e acessar o link: http://127.0.0.1:8001/api/.
Comando para levantar o server:
bin/console server:start
Acessando a url, obteremos os resultado abaixo:
Concluindo
Neste artigo, demos nosso ponta pé inicial. Nos próximos artigos, vamos trabalhar com nossa entidade principal, onde criaremos uma API de Cervejas para servir de exemplo aqui em nossa série.
Você pode acompanhar os códigos criados nesta série em meu Github, acessando o link:
Espero que você tenha gostado! Qualquer dúvida, deixe nos comentários abaixo.