تقديم Tartiflette: تطبيق GraphQL مفتوح المصدر لبرنامج Python 3.6+

الأصدقاء ، عشية عطلة مايو ، قررنا عدم قصفك بمقالات تقنية معقدة ، لذلك وجدنا مواد مثيرة للاهتمام للغاية ، والأهم من ذلك ، يسهل قراءتها ، الترجمة التي يسعدنا مشاركتها معك. هذه المادة التي نريد أن تتزامن مع إطلاق الدورة التدريبية "مطور الويب في بيثون" .

يمكن الاطلاع على النسخة الأصلية هنا .



كان الاستحواذ على Vivendi dailymotion قبل ثلاث سنوات نقطة تحول لمنظمتنا. سمح لنا ذلك بإعادة التفكير في ناقل عملنا ، وإعادة التفكير في عملنا نفسه من البداية إلى النهاية. استخدمنا هذه الفرصة لتقييم dailymotion بشكل عام ، لإعادة النظر في البنية التحتية لدينا ، والأهم من ذلك ، هيكل منتجاتنا.

في النهاية ، أكد التحليل الذاتي ما عرفناه بالفعل: لقد أردنا أن نوزع جغرافيا نظامنا الأساسي وأن نطور واجهات برمجة التطبيقات وتطبيقات الهاتف المحمول والتلفزيون. هذا يمثل التخلي عن البنية المتجانسة الحالية واعتماد نهج قائم على API. توضح هذه المقالة المسار الذي اتبعناه.

معايير ومفاهيم التحقق من الصحة

بدأنا المشروع من خلال تحديد معايير واجهة برمجة التطبيقات ، والتي ضاقت في النهاية إلى أربع نقاط:

  • توفير DX جيد (تجربة المطور) ، سهولة الاستخدام والتنفيذ ؛
  • زراعة مجتمع قوي ومتزايد ، مجتمع يسمح بتجميع واستخدام تكنولوجيا واسعة النطاق ؛
  • سلوك مشابه لبوابة من حيث بنية البرنامج ، تهدف إلى تبسيط تحويل تكامل نظامنا من متراصة إلى الخدمية (بنية موجهة للخدمة) ؛
  • القدرة على تنفيذ أدوات إدارة API ، وهي إدارة API والوثائق والوصول إلى البيانات.

بعد ذلك ، اخترنا العديد من نماذج واجهة برمجة التطبيقات واختبرنا عدة مفاهيم لفهم مدى ملاءمتها:

  • بقية API مع Swagger
  • GraphQL API مع الجرافين
  • API مع Falcor



بعد إجراء اختبارات صارمة ، وجدنا أن GraphQL وتطبيقات الجرافين به تفي بمعاييرنا بشكل أفضل عند مقارنتها بالموديلات الأخرى. سمح هذا للمطورين المتقدمين لدينا باستخدام واجهة برمجة التطبيقات لدينا بسهولة أكبر ، وفي الوقت نفسه تبسيط استخدامه في تطبيقات العميل (على سبيل المثال ، React JS و Apollo Client). في بنياننا ، GraphQL أيضًا أبسط وأكثر فاعلية كبوابة نقش. في النهاية ، قررنا أخيرًا المضي قدمًا باستخدام GraphQL و Graphene.

الطريق إلى الإنتاج

في أبريل 2017 ، بعد تطوير مكثف لمدة ستة أشهر ، دخلنا في الإنتاج باستخدام واجهة برمجة التطبيقات. بحلول الصيف ، قمنا بتحويل جميع منتجات dailymotion (الويب والجوال والتلفزيون) إلى واجهة برمجة تطبيقات GraphQL الخاصة بنا.



عندما اخترنا GraphQL قبل ثلاث سنوات ، كان لا يزال في مرحلة تجريبية ولم يصل إلى الشعبية التي يتمتع بها اليوم. كنا أول اللاعبين الرئيسيين في هذه الساحة ، وهذا جعل إعادة الإعمار الداخلي لدينا أكثر متعة.

ولادة Tartiflette

في الأشهر الأولى من عام 2018 ، بعد أكثر من ستة أشهر من استخدام الجرافين ، قررنا التقدم إلى الأمام وكتابة محرك GraphQL الخاص بنا. هذا سمح لنا بتنفيذ بعض المتطلبات التي لم يتم الوفاء بها من قبل الجرافين. لقد طورنا معايير لمحركنا الخاص. يجب عليه:

  • توفير أفضل DX التفكير لمطوري بيثون.
  • استخدام SDL (لغة ​​تعريف المخطط) ؛
  • استخدام asyncio كمحرك تنفيذ مستقل ؛

بعد ما يقرب من عام من التطوير وعدة أسابيع من اختبار بنيتنا الأساسية (في المتوسط ​​تمت معالجة أكثر من 100 مليون مكالمة يوميًا) ، نحن فخورون بأن نقدم لمجتمع GraphQL محرك Tartiflette مفتوح المصدر الخاص بنا.

الحمض النووي الحمض النووي

Tartiflette هو تطبيق GraphQL Server مبني على Python 3.6+
يتم وصف مخطط GraphQL باستخدام لغة تعريف المخطط الجديدة (SDL) ؛
الأداء عنصر أساسي في عملنا وهذا ينعكس في Tartiflette ؛
بنيت مع زين من بيثون في الاعتبار. ليست معقدة للغاية.

مرحبا العالم على 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 ستتحسن بالتعاون الوثيق مع المجتمع.

كيف تساهم في المشروع؟

Tartiflette على جيثب .
قراءة الوثائق في tartiflette.io ؛
إرسال الملاحظات والاقتراحات إلى سلاك .
انضم إلى المجتمع على Twitter .

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


All Articles