Présentation de Tartiflette: une implémentation Open Source GraphQL pour Python 3.6+

Amis, à la veille des vacances de mai, nous avons décidé de ne pas vous bombarder d'articles techniques compliqués, nous avons donc trouvé du matériel très intéressant et, surtout, facile à lire, dont nous sommes heureux de partager la traduction avec vous. Ce matériel que nous voulons coïncider avec le lancement du cours "Développeur Web en Python" .

L'original se trouve ici .



L'acquisition de Vivendi dailymotion il y a trois ans a été un tournant pour notre organisation. Cela nous a permis de repenser le vecteur de notre travail, de repenser notre travail lui-même du début à la fin. Nous avons profité de l'occasion pour évaluer le dailymotion en général, repenser notre infrastructure et, plus important encore, l'architecture de nos produits.

Au final, l'auto-analyse a confirmé ce que nous savions déjà: nous voulions distribuer géographiquement notre plateforme et développer des API , des applications mobiles et TV. Cela a marqué l'abandon de la structure monolithique actuelle et l'adoption d'une approche orientée API. Cet article décrit le chemin que nous avons suivi.

Critères et concepts de validation

Nous avons commencé le projet en définissant des critères d'API, qui se sont finalement réduits à quatre points:

  • Fournir un bon DX (expérience développeur), une utilisation et une mise en œuvre faciles;
  • La culture d'une communauté solide et croissante , qui permettrait l'agrégation et l'utilisation d'une technologie répandue;
  • Comportement similaire à la passerelle en termes d'architecture logicielle , visant à simplifier la transformation de l'intégration de notre système de monolith à SOA (architecture orientée services);
  • Capacité à mettre en œuvre des outils de gestion d'API, à savoir la gestion d'API, la documentation et l'accès aux données.

Ensuite, nous avons sélectionné plusieurs modèles d'API et testé plusieurs concepts pour comprendre leur pertinence:

  • API Rest avec Swagger
  • API GraphQL avec Graphene
  • API avec Falcor



Après des tests rigoureux, nous avons constaté que GraphQL et ses implémentations Graphene répondaient mieux à nos critères par rapport à d'autres modèles. Cela a permis à nos développeurs frontaux d'utiliser plus facilement notre API et en même temps de simplifier son utilisation dans les applications clientes (par exemple, React JS et Apollo Client). Dans notre architecture, GraphQL est également plus simple et plus efficace en tant que passerelle de modèle. Finalement, nous avons finalement décidé de passer à GraphQL et Graphene.

Chemin vers la production

En avril 2017, après un développement intensif de six mois, nous sommes entrés en production avec notre API. À l'été, nous avons changé tous les produits dailymotion (web, mobile et TV) vers notre API GraphQL.



Lorsque nous avons choisi GraphQL il y a trois ans, il était encore en version bêta et n'a pas atteint la popularité qu'il a aujourd'hui. Nous avons été les premiers acteurs majeurs dans ce domaine et cela a rendu notre reconstruction interne encore plus agréable.

Naissance de la tartiflette

Au cours des premiers mois de 2018, après plus de six mois d'utilisation de Graphene, nous avons décidé d'aller plus loin et d'écrire notre propre moteur GraphQL. Cela nous a permis de mettre en œuvre certaines exigences qui n'étaient pas satisfaites par Graphene. Nous avons développé des critères pour notre propre moteur. Il doit:

  • Fournir le meilleur DX aux développeurs Python;
  • Utiliser SDL (Schema Definition Language);
  • Utilisez asyncio comme moteur d'exécution autonome;

Après près d'un an de développement et plusieurs semaines de tests de notre infrastructure (en moyenne plus de 100 millions d'appels ont été traités par jour), nous sommes fiers d'offrir à la communauté GraphQL notre propre moteur de Tartiflette open source.

ADN Tartiflette

Tartiflette est une implémentation de GraphQL Server basée sur Python 3.6+
Le schéma GraphQL est décrit à l'aide du nouveau langage de définition de schéma (SDL) ;
La performance est un élément clé de notre travail et cela se reflète dans la Tartiflette ;
Construit avec Zen of Python à l'esprit. Pas trop compliqué.

Bonjour tout le monde sur la 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()) 

Vous pouvez découvrir les nouvelles fonctionnalités dans le manuel sur tartiflette.io .

Que se passera-t-il ensuite avec Tartiflette?

La Tartiflette open source n'est que la première étape. Voici quelques idées et projets d'avenir pour le développement de la Tartiflette:

  • Documentation de "polissage" pour les utilisateurs et la communauté;
  • Fournir plus d'exemples et étendre les cas d'utilisation pour vous inspirer à expérimenter avec les capacités de Tartiflette ;
  • Augmentation de la productivité , principalement au niveau du moteur d'exécution.

Et nous avons besoin de vous aussi!



Vous pouvez utiliser notre projet pour presque n'importe quel but et nous aider dans le développement de la Tartiflette! Veuillez vérifier sa durabilité, n'hésitez pas à rechercher des erreurs ou des divergences dans le code et à conserver des commentaires pour améliorer le produit. Nous croyons vraiment que la Tartiflette s'améliorera grâce à une étroite collaboration avec la communauté.

Comment contribuer au projet?

Tartiflette sur Github ;
Lisez la documentation sur tartiflette.io ;
Envoyez vos commentaires et suggestions à Slack ;
Rejoignez la communauté sur Twitter .

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


All Articles