كيفية استخدام HotChocolate لتطبيق التوجيه الأساسي على أنواع الكائنات في GraphQL

Key Directive

تحسين أنواع الكائنات باستخدام التوجيه الرئيسي في HotChocolate

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

هذه المقالة سوف تظهر كيفية الاستخدام لتزيين أنواع الكائنات باستخدام التوجيه. سننظر أيضًا في أمثلة معينة تستخدم كود C# لإنشاء نموذج بسيط الفصل وكيفية تغيير مخطط GraphQL المنتج. سيتم التركيز على الإجراءات الفعلية التي قد تتخذها لإنشاء هذه الوظيفة.

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

سنغطي أيضًا مهام التكوين المهمة، مثل تعديل إعداد خادم GraphQL واستخدام اليمين و الحزم. من خلال التكوين المناسب، يمكنك بسهولة تطبيق التوجيهات والتأكد من اتحاد المخطط المناسب لخدماتك.

يأمر مثال للاستخدام
في HotChocolate، يقوم هذا الأمر بتزيين نوع الكائن باستخدام التوجيه. فهو يحدد الحقل الذي سيكون بمثابة المعرف الفريد للنوع أثناء التعامل مع اتحاد أبولو.
عند تطبيقها على طريقة ما، تقوم هذه السمة بتوجيه HotChocolate لاستخدام تلك الطريقة كحل للأنواع الموحدة. يسمح باسترجاع البيانات ذات الصلة في الخدمات الموحدة عبر مراجع خارجية.
يقوم هذا الأمر بتكوين دعم اتحاد Apollo في خادم HotChocolate GraphQL. من الضروري تمكين ميزات المخطط الموحد، مثل التوجيه.
تسجيل خدمة مثل ، في حاوية GraphQL DI. يتيح لك هذا إدخال الخدمات مباشرة في محلل GraphQL.
في نموذج SDL، يحدد هذا التوجيه مجال المفتاح الرئيسي للاتحاد. لتمكين تحليل الكيان عبر الخدمات، يجب أن تحتوي أنواع الكائنات على الامتداد التوجيه.
تنفيذ استعلام GraphQL بشكل غير متزامن، والذي يُستخدم بشكل شائع في اختبارات الوحدة للتأكد من أن المخطط والتوجيهات، مثل ، يتم تنفيذها بشكل صحيح.
يتم استخدام هذه الميزة لإدخال التبعيات مثل المستودعات أو الخدمات في وسيطات أسلوب محلل GraphQL، مما يتيح استرداد الخدمة في HotChocolate.
يتم استخدام أمر اختبار الوحدة الخاص بـ XUnit للتأكد من أن بعض السلاسل أو التوجيهات، مثل ملف التوجيه، يتم تضمينها في مخطط GraphQL الذي تم إنشاؤه أثناء الاختبارات.

فهم دور التوجيهات الرئيسية في HotChocolate

يشرح البرنامج النصي الأول كيفية تنفيذ التوجيه باستخدام HotChocolate في C#. يضمن هذا البرنامج النصي أن مخطط GraphQL الذي تم إنشاؤه يحتوي على ملف @مفتاح التوجيه للاتحاد مع اتحاد أبولو. يبدأ البرنامج النصي بإنشاء ملف الصف وتعيين و [بطاقة تعريف] صفات حقولها. هذه الخصائص مهمة لإعلام HotChocolate بوضع علامة على الحقل كمعرف فريد للكيان. يعد هذا أمرًا بالغ الأهمية عند إنشاء خدمة GraphQL موحدة يمكن من خلالها مشاركة الكيانات عبر العديد من الخدمات. يتيح تحديد هذا الحقل لخدمة GraphQL حل الكيان في الاستعلامات الموحدة.

ال تعد الوظيفة أيضًا مكونًا أساسيًا في البرنامج النصي. تتيح هذه الوظيفة الثابتة لـ HotChocolate حل الكيان من خلال البحث عن كائن في المستودع. ال تم تسجيله في خادم GraphQL، و يحصل تقوم الطريقة باسترداد أحد الوالدين من خلاله . في كود التمهيد، تسجل التعليمات كائن يستخدم لتنفيذ استعلامات GraphQL. تسمح خدمة RegisterService بحقن التبعيات مثل ParentRepository في محللات GraphQL. يعمل هذا التصميم على تبسيط عملية استرجاع البيانات مع الحفاظ على الفصل الواضح بين الاهتمامات.

يأخذ المثال الثاني نهج المخطط أولاً، باستخدام GraphQL SDL (لغة تعريف المخطط) لتحديد التوجيه داخل المخطط. يعد هذا الحل فعالًا بشكل خاص للفرق التي لديها دراية بالفعل ببنية SDL الخاصة بـ GraphQL. في هذا المثال، @مفتاح يتم تطبيق التوجيه على النوع، مع الإشارة بوضوح إلى الحقل كمعرف فريد. يتيح استخدام schema-first للمطورين مزيدًا من التحكم في كيفية إنشاء مخطط GraphQL وتعديله دون الحاجة إلى الدخول في كود C#، مما يجعله خيارًا أكثر مرونة للفرق الأكبر حجمًا.

وأخيرًا، يتحقق مكون اختبار الوحدة من أن الكود يعمل على النحو المنشود. باستخدام إطار اختبار xUnit، فإن Assert.The يحتوي على يضمن الأمر أن المخطط الناتج يتضمن ملف التوجيه. يتحقق هذا الاختبار من صحة المخطط لوجود ملف @مفتاح التوجيه، الذي يؤكد أن الخدمة تم تكوينها بشكل صحيح للاتحاد. يعد اختبار الوحدة من أفضل الممارسات للتأكد من أن التغييرات التي يتم إجراؤها على مخطط GraphQL أو أساليب المحلل لا تؤدي إلى تعطيل الوظائف، خاصة في النظام الموحد حيث يجب أن تعمل الخدمات المتعددة معًا بسلاسة.

تنفيذ التوجيه الرئيسي في HotChocolate لأنواع كائنات GraphQL

يستخدم هذا الحل C# وHotChocolate واتحاد Apollo لتعديل مخطط GraphQL من الواجهة الخلفية.

using HotChocolate;
using HotChocolate.Types;
using HotChocolate.Types.Relay;
using Microsoft.Extensions.DependencyInjection;
public class Parent
{
    public Parent(string id, string name)
    {
        Id = id;
        Name = name;
    }
    [Key]
    [ID]
    public string Id { get; }
    public string Name { get; }
    [ReferenceResolver]
    public static Parent? Get(ParentRepository repository, string id)
    {
        return repository.GetParent(id);
    }
}
public class Query
{
    public Parent GetParent(string id, [Service] ParentRepository repository)
    {
        return repository.GetParent(id);
    }
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddGraphQLServer()
        .AddQueryType<Query>()
        .RegisterService<ParentRepository>()
        .AddApolloFederation();
}

استخدام النهج الأول لمخطط GraphQL لتطبيق توجيه @key

يستخدم هذا الحل نهج المخطط أولاً مع GraphQL SDL وHotChocolate لإنشاء مخطط مخصص بتوجيه @key.

type Parent @key(fields: "id") {
    id: ID!
    name: String!
}
extend type Query {
    parent(id: ID!): Parent
}
extend type Mutation {
    createParent(id: ID!, name: String!): Parent
}
directive @key(fields: String!) on OBJECT | INTERFACE

schema {
    query: Query
    mutation: Mutation
}

وحدة اختبار HotChocolate GraphQL باستخدام التوجيه @key

فيما يلي اختبار وحدة C# يستخدم إطار عمل xUnit للتأكد من أن خادم HotChocolate يطبق توجيه @key بشكل صحيح في مخطط GraphQL.

using Xunit;
using HotChocolate.Execution;
using Microsoft.Extensions.DependencyInjection;
public class ParentTests
{
    [Fact]
    public async Task ParentSchema_ContainsKeyDirective()
    {
        var serviceCollection = new ServiceCollection();
        serviceCollection.AddGraphQLServer()
            .AddQueryType<Query>()
            .AddApolloFederation();
        var serviceProvider = serviceCollection.BuildServiceProvider();
        var schema = await serviceProvider.GetRequiredService<ISchemaAsync>().ExecuteAsync();
        Assert.Contains("@key(fields: \"id\")", schema.ToString());
    }
}

تحسين GraphQL من خلال اتحاد Apollo وHotChocolate

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

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

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

  1. كيف يفيد اتحاد أبولو تطوير GraphQL؟
  2. يسمح لك اتحاد Apollo بتقسيم مخططات GraphQL إلى العديد من الخدمات، كل منها مسؤول عن قسم من المخطط، مع الحفاظ على واجهة برمجة التطبيقات المتسقة.
  3. ما هو التوجيه المستخدم في HotChocolate؟
  4. ال ينشئ التوجيه معرفًا فريدًا للكيان، مما يتيح حله عبر العديد من خدمات GraphQL.
  5. هل يمكنني استخدام و سمات معا في HotChocolate؟
  6. نعم يتم استخدام الملكية للاتحاد، و يحدد الحقل كمعرف داخل المخطط.
  7. ماذا يفعل تفعل في HotChocolate؟
  8. تسجيل خدمة، مثل المستودع، مع خادم GraphQL، مما يتيح حقن التبعية داخل وحدات الحل الخاصة بك.
  9. كيف يمكنك اختبار مخططات GraphQL باستخدام HotChocolate؟
  10. يتيح HotChocolate اختبار المخطط باستخدام اختبارات الوحدة عن طريق استدعاء المخطط والتحقق من التوجيهات مثل في النتيجة الناتجة.

باستخدام HotChocolate يضمن التوجيه أن اتحادك تم تكوينه بشكل مناسب لاتحاد أبولو. يعمل هذا الأسلوب على تحسين إدارة نوع الكائن ويسمح بحل الكيان عبر الخدمات.

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

  1. يشرح استخدام التوجيه في اتحاد أبولو وكيف يتكامل مع HotChocolate. لمزيد من التفاصيل، راجع وثائق HotChocolate الرسمية على مستندات HotChocolate .
  2. يقدم نظرة عامة على تكوين GraphQL مع اتحاد Apollo باستخدام HotChocolate. انظر هذا الدليل من مستندات اتحاد أبولو لمزيد من المعلومات.
  3. يقدم مثالاً تفصيليًا لتسجيل الخدمة وحل الاستعلام في GraphQL باستخدام HotChocolate. المزيد يمكن العثور عليها في هذه المقالة على تكامل الخدمة مع الشوكولاتة الساخنة .