كيف توحدنا في رسم بياني واحد في بلوك

في Block ، نعمل مع GraphQL المتحدة لتمكين العملاء من استخدام واجهة برمجة تطبيقات موحدة للبيانات المجمعة من الخدمات المصغرة في الواجهة الخلفية. يسمح، على سبيل المثال، بطلب HTTP واحد من تطبيق عميل لجلب بيانات حول التجار والعملاء والطلبات وعناصر الكتالوج والمزيد حتى عندما يتم تخزين البيانات بشكل منفصل في خدمات خلفية غير ذات صلة.

حول GraphQL

GraphQL هي لغة استعلام لواجهات برمجة التطبيقات ووقت تشغيل للوفاء بهذه الاستعلامات ببياناتك الحالية. يسمح لك بتعريف مخطط للأنواع والحقول باستخدام بناء جملة تعريفي ويسمح للعملاء بإرسال طلبات HTTP، أو “عمليات GraphQL”، لجلب البيانات التي يرغبون في استهلاكها فقط، وصولاً إلى مستوى الحقل. النوع هو شيء يمثل كيانًا مهمًا في نظامك، مثل التاجر. الحقل هو سمة لأحد هذه الأنواع، مثل “businessName”.

حول GraphQL المتحدة

تعد GraphQL الموحدة طريقة لدمج العديد من واجهات برمجة تطبيقات GraphQL الصغيرة في واجهة برمجة تطبيقات واحدة كبيرة. ينشئ للعملاء نقطة نهاية واحدة في GraphQL، تخدم واجهة برمجة تطبيقات يشار إليها باسم “الرسم البياني الفائق” ، حيث يمكن حل الحقول من خدمات “الرسم البياني الفرعي” المختلفة في الواجهة الخلفية. يوفر هذا النهج كلاً من تجميع البيانات والخدمات الخلفية المحددة النطاق التي يمكن للفرق الفردية صيانتها.

راجع مثال المخطط أدناه لمعرفة كيفية دمج الأشياء في مخطط GraphQL الموحد:

في بلوك

بدأنا ببناء رسم بياني داخلي بمخطط يصف البيانات عبر الشركة. أنشأنا رسومًا بيانية فرعية بأنواع تمثل التجار والمدفوعات والأجهزة والمزيد. كان عملاؤنا المستهدفون في البداية تطبيقات داخلية، مثل أدوات التشغيل والمطورين. في مبادرة منفصلة، أنشأنا واجهة برمجة تطبيقات GraphQL عامة لـ Square كمرافق لـ REST APAPI.ستخدم هذا الرسم البياني من قبل مطوري الطرف الثالث الذين يقومون ببناء تطبيقات أعلى Square APIs.

منطقياً، احتوت واجهة برمجة تطبيقات Square Public GraphQL دائمًا على مجموعة فرعية من البيانات المتاحة في الرسم البياني الداخلي.

فيما يتعلق بالتنفيذ، كان هذان الرسمان البيانيان في البداية عبارة عن واجهات برمجة تطبيقات GraphQL منفصلة، تعمل على مجموعات تقنية مختلفة.

تستخدم الحزمة الأولى بوابة Apollo لخدمة الرسم البياني الفائق، وأدوات CLI المصممة خصيصًا لإنشاء خدمات الرسم البياني الفرعي. مولدات الرسم البياني الفرعي هي أدوات أنشأناها للسماح للمطورين بتشغيل أمر وإنشاء قاعدة رموز للرسم البياني الفرعي. الخدمات التي تم إنشاؤها هي في الأساس خوادم GraphQL فارغة، باستثناء أنها تعمل بكامل طاقتها وتكون جاهزة أيضًا للاندماج في الرسم البياني الموحد. إنهم مجهزون مسبقًا للقيام بأشياء مثل عمليات فحص مخطط Apollo على كل علاقات عامة، ودفع المخطط إلى السجل عند إنشاء القطع الأثرية. استخدمنا تطبيق Apollo مفتوح المصدر لخادم البوابة، وقمنا بتخصيصه فقط بقدر ما نحتاج لجعله يعمل في Block.

قامت المجموعة الثانية بتشغيل الإصدار الأول من واجهة برمجة التطبيقات العامة. استخدم هذا النظام بوابة مكتوبة بخط اليد ورسومًا فرعية مكتوبة بخط اليد (باستخدام كلاهما باستخدام Graphql-java ) ونهجًا مخصصًا لدمج مخططات GraphQL من رسومات فرعية متعددة. تضمنت الطريقة المستخدمة هنا البوابة التي تحتفظ بنسخة من كل مخطط رسم بياني فرعي، تم التحقق منه في التحكم في الإصدار.

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

انكماش

تتيح لك العقود وضع علامة على أنواع وحقول مخطط GraphQL باستخدام توجيه يبدو كالتالي:

بعد ذلك، في Apollo Studio ، يمكنك إعداد التكوين إما لتضمين أو استبعاد أعضاء المخطط المميزين بقيمة معينة في إسقاط جديد (يُعرف أيضًا باسم “البديل”) لمخطط الرسم البياني.

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

توحيد

لإكمال انتقالنا من واجهات برمجة التطبيقات المنفصلة إلى رسم بياني واحد مع متغيرات متعددة للمخطط، اتبعنا نهجًا من ثلاث مراحل:

  1. توحيد الرسم البياني الفرعي
  2. إنشاء العقد ووضع العلامات
  3. طرح المتغير الجديد

توحيد الرسم البياني الفرعي

كانت الخطوة الأولى هي توحيد جميع الرسوم البيانية الفرعية. نظرًا لأن الخطة كانت نقل كل شيء إلى الرسم البياني الموحد المستند إلى Apollo وكان هذا الرسم البياني داخليًا حاليًا، فقد تمكنا من أخذ جميع الرسوم البيانية الفرعية المستخدمة حاليًا في الرسم البياني العام وتضمينها كرسوم بيانية فرعية في الرسم البياني الداخلي أيضًا.

إنشاء العقد

كانت الخطوة الثانية هي إنشاء متغير العقد الخاص بنا ووضع علامة على جميع أعضاء المخطط الذين أردنا تضمينهم في واجهة برمجة التطبيقات العامة بالإضافة إلى إعداد تكوين العقد لإنشاء متغير جديد يمكننا تقديمه. استخدمنا تكوين عقد “include” بقيمة واحدة: “public-square” ووضعنا علامة على كل ما يلزم أن يكون في واجهة برمجة التطبيقات العامة بهذه القيمة.

لقد كتبنا أيضًا برنامجًا نصيًا لوضع علامة على جميع عناصر مخطط الرسم البياني الفرعي بهذه القيمة، للتعامل مع الحالات التي يتم فيها تضمين مخطط الرسم البياني الفرعي بالكامل في واجهة برمجة التطبيقات العامة. يتوفر الآن نص مشابه تم تطويره بواسطة Apollo كمصدر مفتوح. يستخدم الاصطلاح الذي يمكنك من وضع علامة في المستوى العلوي لمخطط الرسم البياني الفرعي وتشغيل هذا الأمر “لتوسيعه” لجميع العناصر القابلة للعلامات في المخطط.

طرح متغير جديد

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

ثم أجرينا تبديلًا لتوجيه حركة المرور من نقطة نهاية واجهة برمجة التطبيقات العامة الحالية إلى نقطة النهاية الجديدة هذه:

في هذه المرحلة، كان لدينا رسم فائق واحد مع متغيرات متعددة تخدم واجهات برمجة التطبيقات والجماهير المختلفة. تمكنا بعد ذلك من إيقاف تشغيل تنفيذنا المخصص للبوابة، وتقليل مساحة سطح الصيانة لكلا فريقينا.

فوائد الرسم البياني الواحد

نجد أن هناك العديد من الفوائد لتجميع جميع بيانات GraphQL في شركتنا في واجهة برمجة تطبيقات GraphQL واحدة. أكبر الفوائد هي كما يلي:

  • الميزات المشتركة – كل الجهود المبذولة في ميزات النظام الأساسي (أدوات إدارة المخطط، الفحص، إلخ) يمكن أن تفيد الآن كل عميل، بغض النظر عن واجهة GraphQL API التي يعمل عليها.
  • تطوير أسرع – مطلوب جهد أقل لمهندسي فريق المنتج لخدمة بياناتهم إلى جماهير مختلفة. في حالتنا، يمكن للمهندسين إضافة بياناتهم إلى واجهة برمجة التطبيقات العامة ببساطة عن طريق وضع علامات على أجزاء مخططهم التي يريدون أن تكون عامة. هذا أسهل في تجربتنا من معظم الأنظمة الأخرى التي رأيناها مصممة لتضمين البيانات في واجهة برمجة تطبيقات عامة. تتضمن العملية عادةً كتابة التعليمات البرمجية والحفاظ عليها في قاعدة بيانات منفصلة لتشغيل تنفيذ واجهة برمجة التطبيقات العامة، بينما يمكن لحقول التنفيذ التي تتداخل في كلا المخططين مشاركة نفس مسارات الشفرة الدقيقة مع هذا التطبيق.
  • اكتشاف البيانات – يُسهل وجود رسم بياني فائق واحد على الأشخاص العثور على النطاق الكامل لما هو ممكن واكتشافه باستخدام الرسم البياني مقابل وجود واجهات برمجة تطبيقات GraphQL متباينة تحتوي على بيانات منفصلة.
  • علاقات النوع – باستخدام رسم بياني واحد، من الممكن إنشاء مراجع بين الأنواع في الرسم البياني حتى إذا لم يكن واضحًا من البداية، فستكون هناك اتصالات بينها. يمنحنا نهج الرسم البياني الواحد القدرة على نمذجة العلاقات المتغيرة تقنيًا بين الأنواع المهمة في شركة ديناميكية وسريعة الحركة.

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

إذا قمت بالتطوير باستخدام Square APIs وأحببت مزايا GraphQL (رمز العميل المبسط، اكتب الأمان، العمليات المحددة من قبل العميل)، فلن تضطر إلى الانتظار لدمج الاثنين: واجهة GraphQL API متاحة للجميع الآن! يمكنك الاستعلام عن جميع الطلبات بما في ذلك عناصر الكتالوج والعملاء، وكل ذلك في استعلام واحد. تغطي Square GraphQL API مجموعة فرعية من واجهات برمجة التطبيقات الشاملة، وهي متاحة لأي شخص لديه حساب Square Developer. يمكنك أن تبدأ هنا.

المصدر: developer

شاهد المزيد:

ربح المال من الانترنت

ما هي استضافة المواقع الإلكترونية

متخصص سيو

ترجمة هولندي عربي

افضل شركات الاستضافة

تحسين محركات البحث SEO 2023

قوالب ووردبريس عربية

أفضل اضافات ووردبريس

أنت تستخدم إضافة Adblock

يعتمد موقع انشاء على الاعلانات كمصدر لدعم الموقع، يجب عليك ايقاف تشغيل حاجب الاعلانات لمشاهدة المحتوي