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

Made with Slides.com