Creación de una API REST con DRF

José Miguel Amaya Camacho

www.pythonpiura.org

FLISOL 2019 Sede Piura

José Miguel Amaya Camacho

  • Python/Django Remote Developer
  • Full Stack Developer XPRENDE TECH - Ecuador
  • Full Stack Developer Infobibliotecas SL - España
  • Activista del Software Libre
  • Fundador de Python Piura

¿Qúe es una API REST?

  • Representational State Transfer - año 2000, tesis de Roy Fielding, padre de la especificación HTTP.
  • No es una arquitectura de software, sino un conjunto de restricciones con las que podemos crear un estilo de arquitectura de software.
  • Es cualquier interfaz entre sistemas que use HTTP para obtener datos o generar operaciones sobre esos datos en formatos como XML y JSON.

Características API REST

  • Cliente-servidor: ambos débilmente acoplados, cliente no conoce implementación del servidor, servidor no sabe como usan los datos enviados.

  • Interfaz uniforme: cada recurso del servicio REST debe tener una única dirección, “URI”.

  • Operaciones: POST (crear), GET (leer y consultar), PUT (editar) y DELETE (eliminar).

Características API REST

  • Sin estado: cada petición que recibe el servidor debería ser independiente, no es necesario mantener sesiones.

  • Cacheable: debe admitir un sistema de almacenamiento en caché.

  • Sistema de capas: el servidor puede disponer de varias capas para su implementación.

Ventajas para el desarrollo

  • Separación entre el cliente y el servidor: mejora la portabilidad de la interfaz, facilita tener en servidores distintos el frontend y el backend, los componentes del desarrollo evolucionen de forma independiente.

  • Visibilidad, fiabilidad y escalabilidad. se puede migrar a otros servidores o cambiar la base de datos, siempre y cuando los datos de cada una de las peticiones se envíen de forma correcta.

  • La API REST siempre es independiente del tipo de plataformas o lenguajes

¿Qué es Django?

  • Es un framework para aplicaciones web gratuito y open source, escrito en Python.
  • Trabaja con aplicaciones.
  • Soporta múltiples bases de datos.
  • Se puede desplegar en varios servidores web.
  • ORM para facilitarnos la vida al interactuar con la BD.
  • Sistema de autenticación, forms, plantillas, etc.

Django REST Framework

  • Aplicación Django que permite construir proyectos software bajo la arquitectura REST.
  • Incluye gran cantidad de código para reutilizar.
  • Tiene una interfaz administrativa desde la cual es posible realizar pruebas sobre las operaciones HTTP como lo son: POST y GET.

Ventajas

  • API navegable desde el browser.
  • Integración con autenticación basada en OAuth1a o OAuth2.
  • Serialización de datos a partir de ORM u otros orígenes.
  • Muy buena documentación y una amplia comunidad al ser open source.
  • Empresas como Red Hat, Heroku o Mozilla lo usan.

     

Instalación de Python

  • Usaremos python3
  • En Windows debes descargarlo desde: https://www.python.org/
  • Si usas GNU/Linux viene instalado por defecto.
  • Para probar que python funciona sin problemas deben escribir en la terminal lo siguiente:

Entorno Virtual

  • Para instalar los paquetes lo haremos sobre un "entorno virtual", que es un entorno aislado que contiene una copia exacta de python pero en una carpeta definida por el usuario.
  • Creación:
    • python3 -m venv taller
  • Activación:
    • source taller/bin/activate

Instalación de Django y DRF

  • Primero instalamos Django:
    • pip install django==1.11.11
  • Luego Django Rest Framework:
    • pip install djangorestframework==3.8.2

Creando el Nuevo Proyecto

  • Comando django-admin con el parámetro startproject seguido del nombre del proyecto:        
    • django-admin startproject taller
  • La estructura creada por django es la siguiente.

Estructura del Proyecto

  • settings.py: configuración de nuestro proyecto, conexión a la base de datos, aplicaciones instaladas, idioma a utilizar, zona horaria, etc.
  • urls.py: maneja de manera muy sencilla las urls y trabaja con expresiones regulares(antes V. 2.0).
  • wsgi.py: utilizado tanto por el servidor de desarrollo de Django como en las implementaciones de WSGI de producción.
  • manage.py: script que ayuda con la administración del sitio.

Configuracion de DRF

  • En el archivo settings.py debemos agregar la aplicación djangorestframework a la lista INSTALLED_APPS:

Aplicaciones

  • Componentes que tiene una funcionalidad especifica, por ejemplo un blog, foros, galería de fotos, etc.
  • Creación de una aplicación en django:
    • python manage.py startapp cursos
  • Se agrega a INSTALLED_APPS como lo hicimos antes.

Arrancando el proyecto

  • Migraciones: forma como almacena django los cambios en nuestros modelos, son archivos de texto plano con código python.
    • python manage.py makemigrations
    • python manage.py migrate
  • Servidor de desarrollo: sirve para trabajar localmente, nunca en producción, corre en el puerto 8000, permite un usuario en ejecución.

python manage.py runserver

Administrando el proyecto

  • El sitio de administración: sitio ya completamente construido por django para administrar nuestros usuarios y modelos de las aplicaciones, ingresamos agregando /admin a la url del navegador.
  • El superusuario: tiene acceso al admin y a todos las aplicaciones de nuestro proyecto, lo creamos así:

    python manage.py createsuperuser

    .

Los Modelos

  • Un modelo de Django es una descripción de los datos mediante código python que son reflejados en la base de datos.
  • Un modelo ejecuta código SQL por detrás y retorna estructuras de datos convenientes en Python.
  • Django también usa modelos para representar conceptos de alto nivel que no necesariamente pueden ser manejados por SQL.
  • Cada aplicación tiene un archivo models.py donde se colocan los modelos.

models.py

Serializadores

  • Convierten objetos de Python a formatos de datos más simples como JSON y XML (serialización) y viceversa (deserialización).

  • Validan los datos que recibe la aplicación, como los Forms en Django.

  • Para crearlos DRF nos proporciona nos proporciona Serializer y ModelSerializer y se crean en el archivo serializers.py.

serializers.py

Las Vistas

  • Una vista es una función o una clase que básicamente hace dos cosas, toma como argumento un objeto en el que va la información referente a la solicitud que estamos haciendo y devuelve un json, xml u otra estructura de datos que nos interese que devuelva nuestra API, o en caso contrario una excepción si algo ha ido mal.

  • Cada aplicación tiene un archivo views.py donde se colocan las vistas.

views.py

Routers

  • Son una herramienta que nos permiten definir las urls de nuestro API de una manera sencilla y ordenada.
  • Permiten definir limpiamente qué método de una class view se ejecutará al llegar una petición HTTP contra un path concreto usando un verbo HTTP(GET, POST, PUT, PATCH…).
  • Es posible poner todas en el archivo urls.py del proyecto o crear un archivos urls.py para cada aplicación

urls.py / Proyecto

Probemos nuestra API

Usemos Postman

¿Donde encontrar mas información?

  • Visiten nuestro sitio web.
    • http://pythonpiura.org/recursos/
    • http://pythonpiura.org/categories/django/
  • Visiten la documentación oficial:
    • https://docs.djangoproject.com/en/1.11/
    • https://www.django-rest-framework.org/

 

 

MUCHAS GRACIAS

FLISOL 2019 SEDE PIURA

Creación de una API REST con Django REST Framework

By Miguel Amaya Camacho

Creación de una API REST con Django REST Framework

Charla de DRF para el FLISOL 2019 Piura

  • 465