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贸nComenzamos 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贸nEn 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 TartifletteEn 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 TartifletteTartiflette 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)
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 .