Creando una Api Rest con Phoenix Framework
Este tutorial trata sobre como crear una pequeña Api Rest con Phoenix Framework.
Lo que haremos:
- Crearemos una Api Rest con Phoenix que omita el HTML y JS que genera el framework por defecto.
- Crearemos un Endpoint de vehículos, Donde podremos obtener una lista, crear o eliminar vehiculos.
- Configuración CORS: para que pueda usar esa interfaz (Front) que se ejecute en otro puerto/dominio.
Requisitos:
- Instalar Erlang y Elixir (Pueden instalarlo en su máquina o usar asdf)
- Instalar PostgreSQL (Pueden usar docker)
- Cliente Rest (Postman, Insomnia, Curl, etc)
Ya con esto podemos empezar a crear nuestra aplicación. Empezamos por abrir nuestro terminal y escribimos.
mix phx.new cars --no-html --no-webpack
Gracias a que agregamos los flags “no-html” y “no-webpack”, solo tenemos que borrar
rm cars_web/channels/user_socket.ex
Eliminen socket “/socket”, CarsWeb.UserSocket de endpoint.ex, ya que solo estamos creando una Api Rest.
Desde nuestra consola ingresamos a la carpeta cd cars
y luego mix ecto.create
para crear la base de datos.
Lo siguiente es generar el contexto, el esquema y la migración
mix phx.gen.context Vehicles Brand brands description:string:unique
Este comando nos crea lo siguiente
y nos invita a ingresar mix ecto.migrate
para correr la migración y crear la tabla en nuestra base de datos.
Una vez terminado este proceso lo siguiente es crear el Controller, para eso ingresamos lo siguiente y mix se encargará.
mix phx.gen.json Vehicles Brand brands description:string --no-context --no-schema
Lo siguiente es agregar la ruta que se usará, en este caso brands
en el archivo router.ex
y quedaría de la siguiente manera el archivo.
Con esto se tiene un Endpoint completamente funcional, para ver que rutas tenemos disponibles ingresamos en nuestra consola mix phx.routes
Ya tenemos el CRUD listo, Empezamos por crear un brand,
vamos a hacer el request POST usando el cliente rest preferido, en mi caso usaré CURL.
curl -H "Content-Type: application/json" -X POST \
-d '{"brand":{"description":"Chevrolet"}}' \
http://localhost:4000/api/brands
Ya insertamos un brand
podemos repetir este proceso e ingresar mas datos para luego listarlos.
Ahora vamos a consultarlo haciendo un request a /api/brands
que nos debe retornar un array ya que este endpoint nos lista todos los registros.
curl -H "Content-Type: application/json" -X GET \
http://localhost:4000/api/brands
Por ser un GET también podemos hacerlo desde el navegador, el resultado es.
Otro de los endpoints disponibles es /api/brands/:id
con el que podemos ver directamente cada uno de los registros pasando como parámetro el id.
Es el mismo caso para los demás Endpoints update y delete
Ahora para finalizar se debe configurar CORS, en este caso se va a usar corsica
aunque existen más opciones. Lo primero es agregar la dependencia en el archivo mix.exs.
Una vez agregado se debe correr en la consola mix deps.get
para descargar la dependencia, luego se debe agregar el plug en endpoint.ex
asegurándonos de dejarlo antes del plug Router
Como observamos, crear una Api Rest con Phoenix es muy sencillo, apenas agregamos unas cuantas líneas y Phoenix se encargó de crear la base de datos, tablas, controladores y demas, adicional a eso contamos con la potencia de elixir. En la próxima entrega seguiremos con este proyecto y agregaremos test unitarios.