Desarrollo de API Restful con Python, Django y Django Rest Framework
Introducción
Este artículo es una guía para principiantes que quieran desarrollar proyectos con API RESTful usando Python, Django y Django Rest Framework.
- Django es un framework web escrito en Python
- Python es un lenguaje de programación de alto nivel interpretado para programación de propósito general
- API o interfaz de programación de aplicaciones es un conjunto de reglas y mecanismos mediante los cuales una aplicación o componente interactúa con los demás.
- REST es un acrónimo que significa Representational State Transfer o transferencia de estado. Le agrega una capa muy delgada de complejidad y abstracción a HTTP. Mientras que HTTP es transferencia de archivos, REST se basa en la transferencia de recursos.
API REST
REST es un conjunto de principios que definen la forma en que se deben crear, leer, actualizar y eliminar los datos. Es una arquitectura conocida como cliente-servidor, en la que el servidor y el cliente actúan de forma independiente, siempre y cuando la interfaz sea la misma al procesar una solicitud y una respuesta, que son los elementos esenciales. El servidor expone la API REST y el cliente hace uso de ella. El servidor almacena la información y la pone a disposición del usuario, mientras que el cliente toma la información y la muestra al usuario o la utiliza para realizar posteriores peticiones de más información.
REST es muy útil cuando:
- Las interacciones son simples.
- Los recursos de tu hardware son limitados.
En definición simple, es la representación de datos para un cliente en el formato adecuado para él.
Qué es una API RESTful
Una API RESTful es una interfaz que utiliza estos principios para comunicarse hacia y desde un servidor. Está diseñada con los conceptos de REST. El principio más importante en las APIs RESTful es el uso de los métodos HTTP:
- GET
- POST
- PUT
- DELETE
Estos métodos son empleados por los clientes para crear, manipular y eliminar datos en los servidores, respectivamente.
Por lo tanto, RESTful + API es una terminología de uso común para la implementación de dicha arquitectura y restricciones (por ejemplo, en servicios web).
Aquí hay un ejemplo de solicitud GET de la API de GitHub
$ curl https://api.github.com/users/devjaime
Verá una salida similar a esta
Arriba se muestra un conjunto de datos en formato JSON .
La notación de objetos JSON es un formato de archivo de estándar abierto que utiliza texto legible por humanos para transmitir objetos de datos que consisten en pares de valor de atributo y tipos de datos de matriz.
Otros formatos incluyen XML, INI, CSV, etc. Pero hoy en día, JSON se usa ampliamente porque su estructura es intuitiva, lo que facilita la lectura y el mapeo de objetos de dominio sin importar qué lenguaje de programación se esté utilizando.
Phyton y Django
Python , según su creador, Guido van Rossum, es:
lenguaje de programación de alto nivel, y su filosofía central de diseño tiene que ver con la legibilidad del código y una sintaxis que permite a los programadores expresar conceptos en unas pocas líneas de código.
Python utiliza la representación de palabras similares al inglés (p. ej., para métodos, reservar palabras clave y controlar el flujo) que hace que sea más fácil para cualquier principiante saltar directamente a él. También cuenta con un sistema de tipado dinámico, lo que significa que verifica la seguridad de tipo del programa en tiempo de ejecución. También realiza una gestión automática de la memoria.
Django es un Framework de alto nivel que permite a los desarrolladores entregar proyectos a tiempo con un diseño limpio y pragmático.
Sus características principales incluyen un diseño para un desarrollo rápido, un producto seguro y escalable.
Resumen rápido de Django
La forma de Django de propagar cambios al esquema de su base de datos es por medio de sus módulos de migración .
User
modelo de muestra
Si se realizan cambios en sus modelos, ejecute
makemigrations
$ python manage.py makemigrations
Finalmente, puede sincronizar la base de datos con el conjunto de modelos y migraciones.
$ python manage.py migrate
API REST con Django Rest Framework
DRF o Django REST Framework es un conjunto de herramientas potente y flexible para crear API web. Ayuda a los desarrolladores a no reinventar la rueda implementando API REST complejas y sólidas desde cero por sí mismos. Porque cuando sus proyectos se vuelven más y más complejos, pronto se dará cuenta de la necesidad de usar DRF u otro Framework para bajar la complejidad.
1. Instalación y configuración del proyecto
Crear directorio de proyectos
$ mkdir djangoapi
Instalar virtualenv a través de pip
Un entorno virtual permite que un proyecto tenga bibliotecas adicionales o cambios en los paquetes dentro de su entorno sin alterar las bibliotecas globales o de otros entornos.
pip
es un sistema de administración de paquetes que se utiliza para instalar y administrar paquetes de software escritos en Python.
$ pip install virtualenv
Para crear una carpeta de entorno en el directorio de su proyecto
$ cd djangoapi
$ virtualenv venv
Para activar el entorno.
$ source venv/bin/activate
Para deshacer estos cambios en su ruta, simplemente ejecute deactivate
. Más sobre virtualenv .
Instalar django , djangorestframework
$ pip install django
$ pip install djangorestframework
Creando un proyecto Django
$ django-admin startproject blog
Ejecutando tu proyecto
$ python manage.py runserver
Las migraciones no aplicadas se refieren a los archivos de migración predeterminados que se incluyen cuando inicia un proyecto Django.
Para sincronizar estos archivos de migración, simplemente ejecutemigrate
$ python manage.py migrate
La base de datos predeterminada en nuestro proyecto está configurada actualmente en SQLite llamada db.sqlite3
.
Creando la aplicación de un proyecto django
$ cd blog
$ python manage.py startapp posts
La estructura del proyecto debe verse como:
2. modelo
Cada instancia de modelo es una fuente definitiva de información sobre sus datos. En general, cada modelo pertenece a una sola tabla en su base de datos.
__str__
es llamado por lastr()
función incorporada y por la declaración de impresión para calcular la representación de cadena "informal" de un objeto.
Si intenta ejecutar makemigrations
, django aún no verá esos cambios.
Para resolver esto, agregue su posts
a las aplicaciones instaladas de su proyecto.
Para continuar con la migración de modelos:
3. Serialización
Los serializadores permiten traducir la estructura de datos o el estado del objeto a un formato que puede almacenarse o transmitirse y reconstruirse más adelante.
Cree archivos APIserializers.py
y views.py
y aíslelos así:
En este tutorial hemos utilizado ModelSerializer
, más sobre esto .
4. Vistas
Una función de vista, o vista para abreviar, es una función de Python que toma una solicitud web y devuelve una respuesta web.
Como se vio anteriormente, ListAPIView
se usa para puntos finales de solo lectura para representar una colección de instancias de modelo.
En este fragmento de código, usamos métodosgenerics
de vista de rest_framework
, más sobre esto .
5. URL
Aquí es donde configuramos nuestras rutas o rutas URL a nuestras vistas designadas en las que esperamos respuestas específicas para cada una.
6. Finalización de la configuración
Asegúrese de que rest_framework
se agregue a las aplicaciones de nuestro proyecto.
7. Administrador de Django
Dado que aún no hemos configurado nuestras POST
solicitudes, completaremos la base de datos a través del panel de administración de Django.
Para hacer eso, cree una cuenta de superusuario admin
con contraseña 1234password
.
Registre el modelo en el panel de administración.
Eso es todo. Visite el panel de administración y actualice posts
los registros del modelo. Más sobre esto .
8. Probando nuestra API
Estupendo. Ahora es el momento de que actualicemos nuestras vistas y terminemos las operaciones CRUD estándar.
9. Agregar más vistas
POST
es un método utilizado para crear (a veces actualizar) un recurso en la base de datos.
La mayoría de las veces, separamos List
y vemos las Clases Create
cuando queremos exponer una lista de conjuntos de datos mientras evitamos fácilmente una determinada solicitud POST
o creamos un recurso en la base de datos para esa VistaList
específica.
El caso de uso siempre varía para las aplicaciones, puede optar por usar ListCreateAPIView o incluso ViewSets para combinar la lógica para un conjunto de vistas relacionadas.
Opcional : dado que queremos mostrar los datos de una manera más sistemática, anulamos el metodocreate
y mapeamos nuestro controlador de respuesta personalizado en línea.
Agregar más vistas con los métodos GET
, PATCH
, DELETE
para manejar un detalle específico de la publicación del blog.
10. Actualización de URL
Ahora puede enviar solicitudes a su API a través de Postman o Insomnia, su aplicación o realizar solicitudesGET
desde su navegador, ejemplos:
Eso es todo. ¡Ha logrado desarrollar con éxito API RESTful con DRF.