Diario de Python | #4. Probando FastAPI para desarrollar APIs
Tags: python, spanish, devjournal
Published: 2023-01-30 14:24:11

Estas últimas semanas estuve investigando la mejor manera de trabajar con APIs en Python. Varias opciones me llevaron a Django o Flask, pero [un comentario de Reddit](https://www.reddit.com/r/devsarg/comments/100lftl/comment/j2mg8q7/?context=3) me condujo a un nuevo framework que no conocía: [FastAPI](https://fastapi.tiangolo.com/).

## El papá del monstruo
[Sebastián Ramírez](https://github.com/tiangolo) es quizá un nombre que no les recuerde mucho, pero resulta que es uno de los mayores exponentes en el desarrollo web en Python.

Es el creador de FastAPI, Typer y SQLModel; tecnologías que simplifican el trabajo de las librerías anteriormente mencionadas.

Por cierto, también tiene [su blog](https://dev.to/tiangolo) en esta comunidad. Escribe en inglés, pero es muy claro tanto en su narración como las ideas que expresa, las cuales son opiniones técnicas y de la industria.

Tiene [un artículo](https://dev.to/tiangolo/how-to-start-contributing-to-open-source-1jmg) sobre cómo contribuir al software libre que me gustó bastante.

## Mi aprendizaje
Luego de navegar por la documentación y por YouTube, encontré dos videos que me ayudaron mucho a comenzar la creación de mi primer API.

El primero era de MoureDev, el cual me sirvió como una introducción detallada sobre la teoría de APIs, Paths, Querys, Routers, recursos estáticos, OAuth2 JWT, persistencia con MongoDB y despliegue de la aplicación, entre otros tópicos.

{% embed https://www.youtube.com/watch?v=_y9qQZXE24A %}

Luego armé una API con el contexto de una pizzería que necesitaba un sistema de gestión de pedidos acompañado de un tutorial de Ssali Jonathan. No voy a mentirles: tuve que cambiar muchas cosas que no me funcionaban; y mejorar otras que me parecían malas prácticas. Aún así, me parece un buen instructor:

{% embed https://www.youtube.com/watch?v=QQXQAZuJSdw %}

Mi versión final la pueden encontrar en este [repositorio](https://github.com/maxwellnewage/fastapi-pizza-delivery-api) de GitHub. Por supuesto, son libres de hacer un Fork para seguir mejorando mi proyecto.

## Inicializar la BD
Antes de levantar la API, hay que tener un servidor de [Postgresql](https://www.postgresql.org/) funcionando. Luego hay que correr el script [init_db.py](https://github.com/maxwellnewage/fastapi-pizza-delivery-api/blob/master/database/init_db.py), el cual creará todos los esquemas de tablas que hereden de la clase Base, los cuales podemos encontrar en [models.py](https://github.com/maxwellnewage/fastapi-pizza-delivery-api/blob/master/models.py).

## Configuración en PyCharm
Para poder correr la API, necesitamos un servidor Uvicorn funcionando. Esta es la configuración que armé para correrlo:

![Configuración PyCharm Uvicorn](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rqydt9ddj4p18asbalwr.png)

Los campos más importantes son Module name, Parameters y Working Directory.

## Conclusiones
Quise compartirles este proyecto como una demostración de lo que se puede lograr estudiando e implementando FastAPI en un mes. Considero que este framework tiene un potencial enorme, el cual todavía no he exprimido completamente. Pienso hacerlo en un par de proyectos que tengo en mente y voy a ir compartiendo con ustedes a lo largo del diario.