Tartiflette简介:适用于Python 3.6+的开源GraphQL实现

朋友们,在五月假期的前夕,我们决定不使用复杂的技术文章来轰炸您,因此我们发现了非常有趣的内容,而且最重要的是易于阅读的材料,我们很高兴与您分享这些翻译的内容。 我们希望这些材料与课程“ Python中的Web开发人员”的发布相吻合。

原始文件可以在这里找到。



三年前收购Vivendi dailymotion是我们组织的转折点。 这使我们可以重新思考工作的载体,从头到尾重新思考我们自己的工作。 我们利用这次机会总体上评估了Dailymotion ,重新考虑了我们的基础架构,更重要的是,重新思考了产品的体系结构。

最后,自我分析证实了我们已经知道的一切:我们想在地理上分布我们的平台,并开发API ,移动和电视应用程序。 这标志着放弃了当前的整体结构,并采用了面向API的方法。 本文介绍了我们遵循的路径。

标准和验证概念

我们通过定义API标准开始了该项目,该标准最终缩小为四点:

  • 提供良好的DX (开发人员经验),易于使用和实施;
  • 培养一个坚实而不断发展的社区 ,使社区能够聚集和利用广泛的技术;
  • 就软件体系结构而言,其行为类似于网关 ,旨在简化我们的系统集成从整体到SOA(面向服务的体系结构)的转换;
  • 能够实施API管理工具,即API管理,文档和数据访问。

接下来,我们选择了几种API模型并测试了一些概念以了解其适用性:

  • 带有Swagger的Rest API
  • 带有石墨烯的GraphQL API
  • Falcor API



经过严格的测试,与其他模型相比,我们发现GraphQL及其Graphene实现最符合我们的标准。 这使我们的前端开发人员可以更轻松地使用我们的API,同时简化其在客户端应用程序(例如React JS和Apollo Client)中的使用。 在我们的体系结构中,GraphQL作为模式网关也更简单,更高效。 最后,我们最终决定继续使用GraphQL和Graphene。

生产方式

经过六个月的紧张开发,2017年4月,我们使用API​​投入生产。 到夏天,我们所有Dailymotion产品(网络,移动和电视)都切换到了GraphQL API。



当我们三年前选择GraphQL时,它仍处于beta版本,没有达到今天的流行程度。 我们是该领域的第一批主要参与者,这使我们的内部重建更加令人愉快。

塔特弗莱特的出生

在使用Graphene超过六个月之后的2018年前几个月,我们决定更进一步,编写自己的GraphQL引擎。 这使我们可以实现石墨烯无法满足的一些要求。 我们已经为自己的引擎制定了标准。 他必须:

  • 为Python开发人员提供最佳思维的DX
  • 使用SDL (架构定义语言);
  • 使用asyncio作为独立的执行引擎;

经过将近一年的开发和数周的基础架构测试(平均每天处理超过1亿个呼叫),我们很荣幸为GraphQL社区提供我们自己的开源Tartiflette引擎。

Tartiflette DNA

Tartiflette是基于Python 3.6+构建的GraphQL Server实现
GraphQL模式使用新的模式定义语言(SDL)描述的
绩效是我们工作的关键要素,这体现在Tartiflette中 ;
基于Python的Zen 。 不太复杂。

你好世界在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()) 

您可以在tartiflette.io的手册中找到有关新功能的信息。

Tartiflette接下来会发生什么?

开源Tartiflette只是第一步。 以下是Tartiflette未来发展的一些想法和计划:

  • 为用户和社区提供的“抛光”文档
  • 提供更多的例子和扩展用例来激发您尝试Tartiflette的功能;
  • 生产率提高 ,主要是在执行引擎级别。

我们也需要您!



您几乎可以将我们的项目用于任何目的,并帮助我们开发Tartiflette! 请检查它的耐用性,不要犹豫,查找代码中的错误或不一致之处,并保持反馈意见以改进产品。 我们坚信,与社区密切合作,Tartiflette将会变得更好。

如何为该项目做出贡献?

GitHub上的Tartiflette ;
阅读tartiflette.io上的文档;
Slack发送反馈和建议;
Twitter上加入社区。

Source: https://habr.com/ru/post/zh-CN449526/


All Articles