Presentamos Tartiflette: una implementaci贸n de c贸digo abierto de GraphQL para Python 3.6+

Amigos, en v铆speras de las vacaciones de mayo, decidimos no bombardearlos con art铆culos t茅cnicos complicados, por lo que encontramos material bastante interesante y, lo m谩s importante, f谩cil de leer, cuya traducci贸n nos complace compartir con ustedes. Este material queremos coincidir con el lanzamiento del curso "Desarrollador web en Python" .

El original se puede encontrar aqu铆 .



La adquisici贸n de Vivendi dailymotion hace tres a帽os fue un punto de inflexi贸n para nuestra organizaci贸n. Esto nos permiti贸 repensar el vector de nuestro trabajo, repensar nuestro trabajo de principio a fin. Aprovechamos la oportunidad para evaluar el movimiento diario en general, para repensar nuestra infraestructura y, lo que es m谩s importante, la arquitectura de nuestros productos.

Al final, el autoan谩lisis confirm贸 lo que ya sab铆amos: quer铆amos distribuir geogr谩ficamente nuestra plataforma y desarrollar API , aplicaciones m贸viles y de TV. Esto marc贸 el abandono de la estructura monol铆tica actual y la adopci贸n de un enfoque orientado a la API. Este art铆culo describe el camino que seguimos.

Criterios y conceptos de validaci贸n

Comenzamos el proyecto definiendo criterios API, que finalmente se redujeron a cuatro puntos:

  • Proporcionando una buena DX (experiencia del desarrollador), f谩cil uso e implementaci贸n;
  • El cultivo de una comunidad s贸lida y en crecimiento , que permita la agregaci贸n y el uso de tecnolog铆a generalizada;
  • Comportamiento similar a una puerta de enlace en t茅rminos de arquitectura de software , destinado a simplificar la transformaci贸n de la integraci贸n de nuestro sistema de un monolito a SOA (arquitectura orientada a servicios);
  • Capacidad para implementar herramientas de administraci贸n de API, es decir, administraci贸n de API, documentaci贸n y acceso a datos.

A continuaci贸n, seleccionamos varios modelos de API y probamos varios conceptos para comprender su idoneidad:

  • Rest API con Swagger
  • API GraphQL con grafeno
  • API con Falcor



Despu茅s de pruebas rigurosas, descubrimos que GraphQL y sus implementaciones de Graphene cumpl铆an nuestros criterios mejor en comparaci贸n con otros modelos. Esto permiti贸 a nuestros desarrolladores front-end usar m谩s f谩cilmente nuestra API y, al mismo tiempo, simplificar su uso en aplicaciones cliente (por ejemplo, React JS y Apollo Client). En nuestra arquitectura, GraphQL tambi茅n es m谩s simple y m谩s eficiente como pasarela de patrones. Al final, finalmente decidimos seguir adelante con GraphQL y Graphene.

Camino a la producci贸n

En abril de 2017, despu茅s de un intenso desarrollo de seis meses, comenzamos la producci贸n con nuestra API. En el verano, cambiamos todos los productos de Dailymotion (web, m贸vil y TV) a nuestra API GraphQL.



Cuando elegimos GraphQL hace tres a帽os, todav铆a estaba en beta y no alcanz贸 la popularidad que tiene hoy. Fuimos los primeros jugadores importantes en este campo y esto hizo que nuestra reconstrucci贸n interna fuera a煤n m谩s agradable.

Nacimiento de Tartiflette

En los primeros meses de 2018, despu茅s de m谩s de seis meses de usar Graphene, decidimos dar un paso m谩s y escribir nuestro propio motor GraphQL. Esto nos permiti贸 implementar algunos requisitos que Graphene no cumpli贸. Hemos desarrollado criterios para nuestro propio motor. El debe:

  • Proporcione el mejor DX para los desarrolladores de Python;
  • Use SDL (lenguaje de definici贸n de esquema);
  • Use asyncio como un motor de ejecuci贸n independiente;

Despu茅s de casi un a帽o de desarrollo y muchas semanas de probar nuestra infraestructura (en promedio se procesaron m谩s de 100 millones de llamadas por d铆a), estamos orgullosos de ofrecer a la comunidad GraphQL nuestro propio motor Tartiflette de c贸digo abierto.

ADN Tartiflette

Tartiflette es una implementaci贸n del servidor GraphQL construida en Python 3.6+
El esquema GraphQL se describe utilizando el nuevo lenguaje de definici贸n de esquema (SDL) ;
El rendimiento es un elemento clave de nuestro trabajo y esto se refleja en Tartiflette ;
Construido con Zen of Python en mente. No demasiado complicado.

Hola mundo en tartiflette



import asyncio from tartiflette import Engine, Resolver @Resolver("Query.hello") async def resolver_hello(parent, args, ctx, info): return "hello " + args["name"] async def run(): ttftt = Engine(""" type Query { hello(name: String): String } """) result = await ttftt.execute( query='query { hello(name: "Chuck") }' ) print(result) # {'data': {'hello': 'hello Chuck'}} if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(run()) 

Puede encontrar informaci贸n sobre la nueva funcionalidad en el manual en tartiflette.io .

驴Qu茅 pasar谩 despu茅s con Tartiflette?

El Tartiflette de c贸digo abierto es solo el primer paso. Aqu铆 hay algunas ideas y planes para el futuro para el desarrollo de Tartiflette:

  • Documentaci贸n de "pulido" para usuarios y la comunidad;
  • Proporcionando m谩s ejemplos y ampliando casos de uso para inspirarte a experimentar con las capacidades de Tartiflette ;
  • Mayor productividad , principalmente a nivel del motor de ejecuci贸n.

隆Y nosotros tambi茅n te necesitamos!



隆Puede usar nuestro proyecto para casi cualquier prop贸sito y ayudarnos en el desarrollo de Tartiflette! Verifique su durabilidad, no dude en buscar errores o inconsistencias en el c贸digo y mantener comentarios para mejorar el producto. Realmente creemos que Tartiflette mejorar谩 con una estrecha colaboraci贸n con la comunidad.

驴C贸mo contribuir al proyecto?

Tartiflette en Github ;
Lea la documentaci贸n en tartiflette.io ;
Enviar comentarios y sugerencias a Slack ;
脷nete a la comunidad en Twitter .

Source: https://habr.com/ru/post/449526/


All Articles