Ahora que terminé la parte de definir los modelos y la BD, voy a armar los endpoints correspondientes para cada entidad.
Pero antes de continuar, decidí cambiar un poco la arquitectura de las clases para separarlas por sección.
Nueva Arquitectura
Las carpetas quedaron de la siguiente manera:
- color
-- color_model.py: la clase Color que estaba en models.py
- vote
-- vote_model.py: la clase Vote que estaba en models.py
Por supuesto, en create_db.py tuve que modificar los imports:
import color
import vote
Se que esto puede parecer rebuscado si lo comparamos con la solución anterior, pero con el tiempo, a medida que creemos nuevos componentes, notarán que es una buena decisión.
Rutas
En principio voy a crear dos archivos de rutas (color_routes.py y vote_routes.py) los cuales contendrán un simple "hello" y se enlazarán a nuestras rutas en main:
from color.color_routes import color_router
from vote.vote_routes import vote_router
app.include_router(color_router)
app.include_router(vote_router)
El import llama a "color.color_routes" porque existe un color_routes.py dentro de la carpeta color, la cual también contiene color_model.py. ¿Empiezan a notar la importancia de tener el código separado por entidades?
Ahora bien, dentro de color_routes.py estoy importando a color_router, el cual es mi objeto enrutador que compartiré con app. Veamos que tengo dentro:
from fastapi import APIRouter, status
color_router = APIRouter(
prefix='/color',
tags=['color']
)
@color_router.get('/', status_code=status.HTTP_200_OK)
async def home():
return "hello api color!"
El atributo "prefix" será el encargado de darnos una url del estilo "http://127.0.0.1:8000/color" y sobre los tags, veremos posteriormente la utilidad de este atributo.
Como ven, también cambia el get que antes era "app", porque nuestro enrutador ahora es color_router.
Por cierto, el "@" implica que se trata de un Decorator (o decorador), una funcionalidad de Python que permite generar código adicional en tiempo de ejecución. Más adelante los estudiaremos en detalle.
Ahora que ya tenemos implementado nuestros enrutadores, podemos probarlos corriendo el servidor y llamando a "http://127.0.0.1:8000/color" o "http://127.0.0.1:8000/vote", dado que hicimos lo mismo en los dos. Esto dará como respuesta un "hello api color!" o "hello api vote!" según la ruta que utilicemos.
Conclusiones
Ahora que tenemos las rutas preparadas, lo siguiente será generar los endpoints correspondientes para cada entidad; los cuales harán consultas a nuestra base de datos mediante un objeto Session. Ya lo veremos en la próxima entrega.
Top comments (0)