Implemente los endpoints de la REST API
¡Es hora de la parte divertida! ¡Construyamos los endpoints de la API REST para nuestros libros! Añadiremos la implementación de los endpoints en el archivo routes.py, y cargaremos las rutas en el archivo main.py. Comenzaremos por inicializar un objeto APIRouter en routes.py:
pymongo-fastapi-crud/routes.py
Como habrá notado, estamos importando APIRouter desde el paquete fastapi. Utilizaremos este objeto para definir los endpoints de nuestra REST API. También estamos importando los modelos Book y BookUpdate que hemos definido anteriormente.
publicación /book
El primer endpoint que implementaremos es el endpoint publicación /books para crear un nuevo libro. Añada lo siguiente después de la línea router = APIRouter():
pymongo-fastapi-crud/routes.py
La ruta es / porque antepondremos /books a todos los puntos finales de los libros. La descripción_de_respuesta se mostrará en la documentación de la API. El código de estado HTTP es el código de estado que se devuelve cuando la solicitud es exitosa. Utilizamos el modelo Book para validar tanto los datos pasados en el cuerpo de la solicitud como la respuesta que enviamos de vuelta. FastAPI gestiona la validación para nosotros. En el cuerpo de la función, estamos utilizando el método insert_one() de PyMongo para añadir el nuevo libro a la colección de libros. Estamos utilizando el método find_one() para recuperar el libro recién creado de la base de datos. Puede leer más sobre los métodos insert_one() y find_one() en el artículo de la documentación de PyMongo para operaciones a nivel de colección.
Finalmente, estamos devolviendo el libro creado.
GET /book
Lo siguiente, implementaremos el endpoint GET /book para devolver una lista con todos los documentos de la colección de libros. Añada lo siguiente al final del archivo routes.py:
pymongo-fastapi-crud/routes.py
Para el modelo de respuesta, estamos utilizando el tipo List[Book]. Esto significa que la respuesta será una lista de objetos de tipo Libro. También estamos utilizando el método find() para recuperar no más de 100 libros de la base de datos. Para aprender más sobre limit y los demás parámetros del método find(), consulte la página de documentación dedicada de PyMongo.
GET /book/{id}
Vamos a crear otro endpoint GET para recuperar un único libro por su id. Añada lo siguiente al final del archivo routes.py:
pymongo-fastapi-crud/routes.py
Aquí, estamos utilizando el método find_one() para recuperar un único libro de la base de datos. Si se encuentra el libro, lo devolveremos. Si no se encuentra el libro, generaremos una HTTPException con un código de estado 404 Not Found y un mensaje apropiado.
PUT /book/{id}
Probablemente, el punto final más importante para nuestra REST API es el punto final PUT /book/{id}. Este punto de conexión nos permite actualizar un solo libro. Agregue la implementación al final del archivo routes.py:
pymongo-fastapi-crud/routes.py
Repasemos el código. Primero, estamos construyendo un objeto que usaremos para actualizar el libro. Luego, si hay campos en el objeto libro, estamos usando el método update_one() para actualizar el libro en la base de datos. Es importante tener en cuenta que estamos utilizando el Operador de actualización $set para asegurarnos de que solo se actualicen los campos especificados en lugar de reescribir todo el documento.
Luego, verificamos el atributo modified_count del update_result para asegurarnos de que el libro fue actualizado. Si ese es el caso, estamos utilizando el método find_one() para recuperar el libro actualizado de la base de datos y devolverlo.
Si no hay campos en el objeto del libro, simplemente devolvemos el libro existente. Sin embargo, si no se encuentra el libro, generaremos una HTTPException con un código de estado 404 Not Found.
borrar /book/{id}
El último endpoint que implementaremos es el endpoint DELETE /book/{id} para borrar un solo libro por su id. Añada lo siguiente al final del archivo routes.py:
pymongo-fastapi-crud/routes.py
Lo único notable aquí es que si se borrara el libro, estamos devolviendo un código de estado 204 No Content. Este es un código de estado de éxito que indica que la solicitud se ha completado con éxito y que no hay contenido para enviar en el cuerpo de la respuesta.
Registre el
Finalmente, necesitamos registrar los endpoints de /book. Abra el archivo main.py, importe el módulo de rutas y registre el enrutador de libros. Su versión final del archivo main.py debería verse así:
pymongo-fastapi-crud/main.py