Hola a toda la comunidad de CódigoJS. Continuamos con una nueva lección un poco más avanzada. Vamos a instalar y configurar nuestro proyecto para usar Django-GraphQL.
Django-GraphQL funciona a través de la librería Graphene. Django-Graphene proporciona algunas abstracciones adicionales que facilitan la adición de la funcionalidad GraphQL a un proyecto Django.
Tabla de contenidos
Instalando Django-Graphene
En las lecciones anteriores vimos como configurar un virtualenv, activarlo e instalar paquetes. Para comenzar nos movemos a la carpeta del proyecto y activamos el virtualenv.
$ cd ~/Proyecto/tareas
$ source tareas/bin/activate
Nos movemos a la carptea del backend que es donde está toda la lógica del proyecto Django.
$ cd tareas
Ahora vamos a instalar los paquetes que necesitamos:
$ pip install graphene-django django-filter
Además de graphene-django, instalamos django-filter porque lo necesitaremos más adelante.
Configurando Django-Graphene
Lo primero que debemos hacer es añadir graphene-django a las APP del archivo de configuración settings.py de Django:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'graphene_django',
'tareas'
]
Seguido, nos vamos hasta el final del archivo y añadimos la siguiente configuración:
GRAPHENE = {
SCHEMA': 'backend.schema.schema',
}
El SCHEMA indica donde estará ubicado nuestro esquema principal. Como podemos ver, lo crearemos en la capeta backend que es el módulo principal del proyecto, pero lo podríamos poner en cualquier otro sitio.
Creamos el archivo schema.py en el directorio backend y le añadimos el siguiente código:
import graphene
from graphene_django.debug import DjangoDebug
class Query(graphene.ObjectType):
debug = graphene.Field(DjangoDebug, name='_debug')
class Mutation(graphene.ObjectType):
debug = graphene.Field(DjangoDebug, name='_debug')
schema = graphene.Schema(query=Query, mutation=Mutation)
Las clases Query y Mutation son usadas como base para crear la estructura de nuestro Schema, por el momento lo vamos a dejar así para que funcione. En la próxima lección haremos algunos cambios.
Creando el endpoint unico de GrahpQL
Ahora vamos a crear el único endpiont que se creea con GraphQL, desde donde será consumida nuestra api.
Editamos el archivo urls.py que está en el backend y añadimos la siguiente url:
path('graphql/', csrf_exempt(GraphQLView.as_view(graphiql=True))),
de tal modo que quede así:
from django.urls import path
from django.contrib import admin
from graphene_django.views import GraphQLView
from django.views.decorators.csrf import csrf_exempt
urlpatterns = [
path('admin/', admin.site.urls),
path('graphql/', csrf_exempt(GraphQLView.as_view(graphiql=True))),
]
Aquí lo más importante es el parámetro graphiql=True, el cual si lo establecemos en True nos va permitir testear la api a través de una interfaz web. Después, cuando estemos en producción debemos establecerla en False.
Bueno, ahora podemos abrir nuestro navegador y probar la siguiente url: http://localhost:8000/graphql
Si todo ha salido bien deberíamos estár viendo una consola como la siguiente:
Bueno, esto es todo por hoy, cualquier duda en los comentarios.
En la próxima lección comenzaremos a hacer las primeras consultas en la API. Recuerda subscribirte a nuestro boletín para que no te pierdas ninguna publicación.
El código de este proyecto está disponible en Github por si lo quieres descargar:
Nos vemos.