Creando una Api Rest con Phoenix Framework

Cristian Rengifo
4 min readFeb 13, 2020
Elixir y 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.

router.ex

Con esto se tiene un Endpoint completamente funcional, para ver que rutas tenemos disponibles ingresamos en nuestra consola mix phx.routes

Resultado de correr 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.

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.

--

--

Cristian Rengifo

Software Developer #ASPNET, #WebApi, #MVC, #Angular, #Informix4GL and learning #Elixir