Comprensión de las tareas realizadas por cada método HTTP en el desarrollo de una simple API RESTful con Django que interactue con una base de datos SQLite.


Comprensión de las tareas realizadas por cada método HTTP en el desarrollo de una simple API RESTful con Django que interactue con una base de datos SQLite.



Existen una gran cantidad de librerías de python que podemos utilizar para el desarrollo de API web RESTful simples y complejas. Podemos usar python para interactuar con bases de datos, servicios web y diferentes APIs. Usando frameworks como Django y Django REST, de esta manera podemos crear una API web que realice CRUD, (Crear, leer, actualizar y eliminar), por sus siglas en inglés, usando  una base de datos de SQLite.







Usualmente cuando creamos por ejemplo, una aplicación móvil, lo que más interesa es hacerlo en el menor tiempo posible, de forma que podamos interactuar con ella, sin la necesidad de hacer configuraciones o instalaciones complejas. Para esto podemos usar Django, con él podemos hacer solicitudes HTTP, a su vez, usando una base de datos SQLite que trabaja por default con Django. 





Cada uno de los verbos HTTP nos servirán para que la API web se comunique con la base de datos SQLite, los verbos son HTTP son los siguientes: 
  • GET: recupera información de la base de datos
  • POST: Crea un nuevo elemento en la base de datos
  • PUT: Actualiza un elemento de la base de datos
  • DELETE: Borra un elemento de la base de datos





La base de datos pude estar organizada, de manera que tenga distintos recursos y hay que mencionar que en una API RESTful, cada recurso tiene su propia URL única. Además, los verbos pueden realizarse para una colección de recursos, es decir muchos recursos a la vez, o para un solo recurso.
Por ejemplo, si tengo una base de datos de una panaderia, está puede estar organizada en: "pasteles", "pan", "desayunos", "cafés", etc.. Una colección de recurso serían cualquiera de las clases mencionadas anteriormente, sin embargo si dentro de "pasteles", existen 10 clases de pasteles, 1 - pastel de chocolate 2- pastel de fresa, 3 - pastel de coco, y asi sucesivamente, cada uno de estos elementos sería un recurso único de la base de datos.





Entonces por ejemplo  http://localhost:8000/pasteles/ sería la URL para la colección de pasteles de chocolate y t http://localhost:8000/pasteles/1/ sería la URL asignada para "pastel de chocolate", y  ese es un recurso único.
Si por ejemplo, un cliente desea pedir un nuevo sabor de pastel no existe en la base de datos, puede hacerlo con el verbo POST y http://localhost:8000/pasteles/ y adicionalmente enviar un archivo JSON que contenga el nombre y los sabores que desea para ese nuevo pastel. Así el sistema puede valorar si es posible de acuerdo a las condiciones de la base de datos crear ese nuevo pastel.
Si es posible el servidor creará una nueva linea en la tabla que corresponde a "pasteles" con el nuevo sabor de pastel y retornara  un código de estado "201 Created", adicionandole además, una URL por defecto. 


Por otro lado, si debemos realizar un requerimiento GET para un pastel en específico por ejemplo http://localhost:8000/pastelesdechocolate/2/, nos retornará la información acerca del pastel con la clave = 2, es decír "pastel de fresa". De esta manera, si el servidor encuentra el pastel retornara un código de estado 200 ok en formato JSON, de lo contrario, si por ejemplo, solicitamos un recurso que no existe en la base de datos, como en este ejemplo de los pasteles: http://localhost:8000/pastelesdechocolate/50/, el servidor retornará un código de estado 404 Not found.

Si queremos además hacer un requerimiento con un PUT, con la URL correspondiente a un recurso, logramos recurperar la información de dicho recurso, y a su vez mediante un JSON con las características necesarias que reemplace el recurso existente por un recurso nuevo. Como resultado de este requerimiento el servidor validará que exista el recurso, y que el reemplazo cumpla con las especificaciones de la base de datos. El id o la clave de este nuevo recurso será igual al anterior, y el servidor reemplazará en la linea existente de la base de datos por la información suministrada en el JSON. Si no proporcionamos la información adecuada obtendremos un código de estatus 400 Bad Request, y si el servidor no encuentra id del recurso retornará 404 Not Found.






Así mismo si hacemos un requerimiento DELETE, para remover un recurso. Con este requerimiento, el servidor recupera el recurso con el id especificado, creará además el objeto del recurso en python, cuando el recurso es encontrado, de esta forma el servidor solicitará a la capa de mapeo relacional de objetos o ORM por sus siglas en inglés que elimine la fila del recurso asociada con este objeto. ORM es una capa predeterminada que se puede usar para interactuar con datos de aplicaciones de varias bases de datos relacionales como SQLite, PostgreSQL y MySQL, así el servidor retornará un código de estatus 202 No Content, si el id de la URL no empata con ningún recurso, el servidor retornará 404 Not Found.









Comentarios

Entradas populares de este blog

¿Qué es un Webhook y para qué sirve?