API desde cero con Symfony 4

Captura de pantalla 2019-01-25 a las 11.35.40.png
Solucionex
25
Ene 19

Después de haber escrito varios artículos sobre herramientas de desarrollo en Symfony, es hora de juntarlas y abordar cómo hacer una API. Tan de actualidad para desarrollos de aplicaciones web desacopladas.

Con Symfony es muy sencillo, ya que solo tendremos que instalar api platform, con unas sencillas anotaciones crearemos, no solo la API, si no también un administrador y un entorno de pruebas para nuestro proyecto.

Descarga el Proyecto Symfony

Puedes descargar el proyecto de nuestro repositorio público para hacer la prueba directamente mientras lees el código: Ejemplo de To Do List

Entorno de Desarrollo

Empezaremos creando un Docker como ya explicamos en el artículo anterior Entornos de desarrollo ágiles en local con docker. Una vez creado el docker montaremos nuestro proyecto Symfony utilizando Composer:

$ composer require Symfony/skeleton

Necesitaremos los bundles de api y admin, que nos instalará API Platform y Easy Admin Bundle, herramienta que merece un artículo a parte.

$ composer require api admin

Y por último los bundles de desarrollo para crear entidades, precargar datos, hacer debut...

$ composer require maker profiler arm-fixtures --dev

Con todo esto ya podemos empezar a "desarrollar", si es que se puede llamar desarrollar al hecho de no escribir ninguna línea de código, que es lo que vamos a hacer.

¿Qué vamos a hacer?

El objetivo es hacer una entidad que atacaremos desde una api, para ello crearemos una entidad "ToDo", con el objetivo de en futuros posts crear una ToDoList, un ejemplo nada usado en ejemplos de desarrollo.

Crear las Entidades

En nuestro caso, la entidad y para ello nos ayudaremos de otra herramienta que ya abordamos aquí previamente: el maker bundle, componente que hemos añadido unas líneas más arriba con composer. Llegado a este punto tendremos que ejecutar en consola:

$ php bin/console make:entity

En este wizard, lo más importante es que le indiquemos que es un recurso que queremos acceder por api, esta pregunta será la primer que nos haga tras el nombre de la entidad, que en nuestro caso hemos usado "ToDo", y habrá que responder "yes". Después añadiremos el resto de campos, en el ejemplo utilizado, he puesto un title, un body y un booleano done para indicar si la tarea está hecha. Se le puede añadir una fecha, o lo que queramos.

La base de datos

En el fichero .env tendremos que definir la base de datos, y ejecutar los comandos que nos proporciona Symfony para crear la base de datos y el esquema:

$ php bin/console doctrine:database:create $ php bin/console doctrine:schema:update --force --dump-sql

Cargar datos iniciales

Al instalar el orm-fixtures nos damos la oportunidad de precargar una serie de datos en nuestra entidad "ToDo" para no tener que probar con la entidad vacía, este componente ya se explicó en este artículo.

En el fichero src/DataFixtures/AppFixtures añadiremos los nuevos elementos, y esto es lo más que vamos a programar hoy.

namespace App\DataFixtures; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Common\Persistence\ObjectManager; use App\Entity\ToDo; Class AppFixtures extends Fixture { public function load(ObjectManager $manager) { for ($i = 0; $i < 10; $i++) { $todo = new ToDo(); $todo->setTitle($i . '.- I have to do something...'); $todo->setDone(false); $manager->persist($todo); } $manager->flush(); } }

Estos datos habrá que cargarlos desde consola, con el comando que nos proporciona el componente de Symfony:

php bin/console doctrine:fixtures:load -n

Easy Admin Bundle

Este administrador de sencillísima configuración nos va a permitir ver a través de una interfaz gráfica nuestros datos, tan sencillo de usar como configurar un fichero yaml, el config/packages/easy_admin.yaml

easy_admin: entities: - App\Entity\ToDo

El .htaccess

Por último, y para facilitarnos la vida con las url, deberíamos tener un .htacces, para ello tenemos dos opciones:

  1. Coger directamente el .htaccess de Symfony 4
  2. Instalar el apache-pack, que lo creará automáticamente, ejecutando Composer require apache-pack

API en Symfony 4

Ya tenemos nuestra primera configuración de la API después de haber seguido este pequeño tutorial paso a paso, ¿no te lo crees?

Accede a la url /api y verás el entorno de prueba, aquí podrás lanzar peticiones contra la entidad ToDo, pudiendo crear nuevos elementos, listarlos, modificarlos y borrarlos.

¿Necesitas una interfaz gráfica para ver los datos? Para eso hemos instalado también el easy admin bundle, accediendo a la url /admin tienes la entidad