Compartir
Contenidos contratados por la marca que se menciona

Cómo crear un servicio REST en 30 líneas de código de Django y Python

Cómo crear un servicio REST en 30 líneas de código de Django y Python
Guardar
3 Comentarios
Publicidad
Tweets por el @agbotraining.

Diseñado para tener una sintaxis clara y concisa, Python es un lenguaje que permite a los desarrolladores adoptar varios estilos: programación orientada a objetos, programación imperativa y programación funcional. Su demanda ha aumentado exponencialmente en estos momentos: desde el desarrollo web con Django hasta la industria financiera y el Big Data.

Django es para perfeccionistas con los pies en el suelo. Pone énfasis en el re-uso, la conectividad y extensibilidad de componentes y el desarrollo veloz. ¿Suena bien, cierto? Pues hoy Alberto Casero, experto en software inteligente e Instructor de AGBO Training, demuestra con pocas líneas de código el gran poder de este framework.

Creando un API Rest para gestionar archivos con tan sólo 33 líneas de código

Al igual que Django y el Dr.Schultz hacen una perfecta pareja de cazarrecompensas en la película de Tarantino, Django y REST Framework son una pareja perfecta para los desarrolladores de backend. Si hay algo que valoro de Django, además de su integrados sistema de usuarios y grupos y web de administración, es lo bien pensado que está. Por suerte su filosofía se extiende entre los desarrolladores, como es el caso del excelente REST Framework.

Gracias a la mezcla de ambos, podemos hacer cosas increíbles con muy pocas líneas de código y hoy vamos a demostrarlo con 33 líneas contando imports, comentarios y líneas en blanco para que el código sea legible. Sí, en el título del post dice 30 líneas ¡pero redondeamos a la baja, que hay líneas en blanco!

django

Lo primero que necesitamos, es instalar Django y REST Framework en nuestro sistema para poder empezar a trabajar. Para ello usamos pip (gestor de paquetes de Python) desde nuestra consola:

1 2

Una vez instaladas nuestras armas, vamos a crear un projecto Django:

2 1

Esto nos creará una carpeta files_ manager en cuyo interior tendrá otra carpeta files_ manager con archivos py que actúan como archivos de configuración del proyecto. La filosofía de Django es DRY (Don't Repeat Yourself), así que el propio framework nos obliga a crear aplicaciones para que podamos reutilizarlas. Así que en nuestro proyecto files_ manager vamos a crear una aplicación llamada files.

Para ello, accedemos a la carpeta del proyecto y creamos nuestra aplicación:

3

Esto nos creará una carpeta files con archivos py de nuestra aplicación. Como otros tantos frameworks, Django usa el patrón MVC (aunque un poco de aquella manera: los controladores los escribimos en un archivo views.py). Vamos a dejarnos ya de tanta consola y a tirar algo de código. Abrimos el archivo models.py de la carpeta files y escribimos lo siguiente:

4 1

Lo que hemos hecho es crear un modelo File que tiene tres campos:

  • file: que almacenará la ruta al archivo que subamos.
  • created_ on: campo que almacenará la hora de creación del archivo.
  • modified_ on: campo que almacenará la hora de última modificación del archivo.
  • Bien, sin tener que escribir nada más, Django se encargará pon nosotros de:

  • Gestionar si la carpeta donde vayamos a subir los archivos existe o no (de no existir la creará).
  • Controlar si ya existe un archivo con el mismo nombre que el archivo que subimos para renombrarlo.
  • Asignar una fecha de creación del archivo automáticamente.
  • Asignar una fecha de modificación del archivo cada vez se modifique (también de manera automática).
  • Lo siguiente que tenemos que hacer es crear un serializador, el cual se encargará de actuar como traductor entre nuestro modelo y los datos que nos envíen a través de las peticiones HTTP de nuestro API Rest.

    Creamos un archivo serializers.py en la carpeta files con el siguiente contenido:

    5 1

    ¡Listo! Como podéis ver, tan sólo tenemos que decirle al ModelSerializer cuál es el modelo que debe representar y él se encarga de todo. Lo siguiente es implementar nuestra API, así que antes vamos a pensar qué queremos que haga:

  • En la URL /files/ quiero obtener un listado de los archivos que hay en mi sistema si hago una petición GET. Si hago una petición POST, entonces subiremos un nuevo archivo.
  • En la URL /files/fileID/ quiero poder obtener el detalle de un archivo si hago una petición GET, mientras que si hago una petición PUT actualizaremos el archivo y si hago una petición DELETE lo eliminaremos.
  • Bien entonces vamos a abrir nuestro archivo views.py de la carpeta files para escribir lo siguiente:

    6 1

    De nuevo, con tan sólo darle un poco de información a la clase que creamos es suficiente: le decimos de dónde debe sacar la información (queryset) y qué debe de utilizar como traductor (serializer_class). Del resto se encargan Django y REST Framework. Bien, casi hemos llegado al final.

    Ahora tenemos que conectar de algún modo este ViewSet con las URLs del API Rest que hablábamos antes. Para ello, utilizaremos un Router. Abrimos el archivo urls.py esta vez de la carpeta files_manager añadimos 5 líneas:

    7

    Importamos nuestro FileViewSet y el SimpleRouter (líneas 2 y 3):

    8

    Registramos el FileViewSet en el router (líneas 7 y 8):

    9

    Y añadimos las URLs que el router genera por nosotros a los patrones de URL de nuestro proyecto (línea 12):

    10

    Bien, penúltimo paso: registrar nuestra aplicación y REST Framework en el proyecto. Para ello en el archivo settings.py de la carpeta files_ manager añadimos la siguiente línea a la tupla INSTALLED_ APPS:

    11

    Bien, este es todo el código que necesitamos. Ahora vamos a probarlo. Primero tenemos que crear los archivos de migración para posteriormente crear nuestro esquema de base de datos (por defecto, Django utiliza SQLite salvo que le indiquemos lo contraro, ideal para desarrollar sin tener que instalar software adicional). Volvemos a nuestra consola y ejecutamos:

    12

    Esto creará un archivo 0001_ initial.py en la carpeta migrations de nuestra carpeta files. Estas migraciones se crean cada vez que hay un cambio en los modelos (cambios en estructuras de tablas SQL) o cuando los creamos por primera vez. Django hace esto para evitar el tener que andar con scripts SQL de migración. Con los scripts de migración creados, tenemos que aplicar la migración:

    13

    Muy bien, ya estamos listos para probar nuestro API. Vamos a arrancar el servidor HTTP de desarrollo integrado en Django desde la consola:

    14

    Si ahora abrimos en nuestro navegador la URL: http://127.0.0.1:8000/files/ deberíamos ver el API navegable funcionando.

    ¿API navegable?

    Sí, REST Framework proporciona un API navegable que nos permite probar rápidamente nuestros APIs ¡sin necesidad de utilizar clientes REST! Para probar la subida de archivos con un cliente REST, deberemos poner la cabecera Content-Type: multipart/form-datapara el envío de la petición POST (porque los archivos no se suben en JSON!). Como veis, con muy poco esfuerzo hemos creado algo muy potente. Pero, ¿y si os decimos que con unas 5 líneas de código extra podemos incluir lo siguiente?

  • Control de autenticación para que los usuarios puedan usar el API sólo si están autenticados (+1 línea).
  • Asignar la autoría de la creación de archivos a un usuario del sistema a la aplicación integrada en Django para gestión de usuarios y grupos (+3 líneas).
  • Hacer visibles los archivos en el administrador web de Django (+1 línea). Sí, Django nos proporciona también un backend de administración web sin apenas esfuerzo.
  • Como veis, Django es un framework pensado para hacer la vida más fácil a los desarrolladores web, proporcionando herramientas que nos permiten olvidarnos del desarrollo repetitivo y centrarnos en desarrollar únicamente nuestra lógica de negocio. Al igual que en la película de Tarantino Django no desaprovecha las balas, en este caso, Django no desaprovecha las líneas de código.

    16280261426 8e4a871275 B

    Y recordad: la D es muda

    Ya sea para crear backends o web apps completas, Django y Python son como Django y Dr. King Shultz: ¡una pareja indetenible! Descubre más posibilidades y domina esta tecnología con el KeepConding Startup Engineering Master Bootcamp.

    ** Puedes ver el código con los saltos de línea y espacios en blanco correspondientes en este enlace.

    Imágenes | Brett Hoerner; Stefan Imhoff; Wonderlane

    En Desarrollo para Startups

    Publicidad

    También te puede gustar

    Comentarios cerrados

    Ver más artículos