كيفية الحصول على Apollo 2.0 يعمل مع اشتراكات GraphQL +

(مع التحيز تجاه النيزك)

التحديث (28 نوفمبر ، 2017): تم استبدال الكلمة الرئيسية "Cache" من حزمة NPM "apollo-cache-inmemory" بـ "InMemoryCache". رمز جديد يعكس رمز العمل الأكثر حداثة. إذا كانت لديك أية مشكلات أخرى ، فيرجى الإبلاغ عنها أثناء محاولتنا مواكبة آخر التغييرات في Apollo.

هناك الكثير من الاضطرابات في الوقت الحالي حيث يتعلم المطورون أن Apollo 2.0 أحدث تغييرات جذرية في تطبيقات 1.0 السابقة ، وأن المستندات الرسمية ومعظم الأمثلة على الإنترنت أصبحت قديمة. حصلت مؤخرًا على 2.0 (مع اشتراكات!) واعتقدت أنني سأوفر الكثير من متاعب البحث عن المنتدى. لأغراض خاصة بي ، قمت بتنفيذ هذا في Meteor ، لكنه مجرد قفزة وتخطي وقفز إلى Node.

TL، DR

يمكن العثور على تطبيق مثال كامل الوظائف هنا.

قبل أن نبدأ

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

ما سوف تحتاجه

قام Apollo 2.0 بالتخلي عن SubscriptionManager و networkInterface وبعض الأشياء الأخرى لصالح Apollo-Link. إنها علامة جيدة ، لأنها تعني أن Apollo تنضج وستصبح الآن منصة يمكن للمطورين الآخرين من خلالها بناء مكونات إضافية. ولكن هذا معتمد فقط في الإصدارات الأحدث من Apollo وعلينا إجراء بعض الترقيات اليدوية للحفاظ على جميع الحزم الأخرى متزامنة.

ستحتاج إلى حزم NPM التالية (يرجى الانتباه إلى الإصدارات):

أبولو العميل @ بيتا
أبولو التخزين المؤقت للinmemory @ بيتا
apollo-link@0.7.0
apollo-link-http@0.7.0
apollo-link-ws@0.5.0
graphql-اشتراكات
اشتراكات النقل-WS
أبولو خادم اكسبريس
التعبير
graphql
graphql الأدوات
هيئة محلل

إذا كنت تستخدم Meteor ، فستكون الحزم التالية مفيدة أيضًا:

نيزك إضافة أبولو سويدو: الحريق أبولو سويدو: graphql webapp

(إذا كنت تستخدم React أو Vue ، فلا تتردد في استخدام شيء آخر غير swydo: blaze-apollo)

الزبون

حدثت معظم التغييرات الكبرى على جانب العميل. سيبدو عميلك (مع الاشتراكات) الآن كالتالي:

الخادم

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

حل له

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

ملاحظات

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

ثانيًا ، إذا كنت تجري تغييرات على بياناتك فقط من خلال طفرات GraphQL ، فإن المثال أعلاه سيعمل بشكل جيد. ومع ذلك ، إذا كنت تقوم بتحديث البيانات من أماكن أخرى أيضًا وتريد أن تتفاعل الاشتراكات مع هذه التغييرات بنفس السرعة ، فستحتاج إلى استدعاء pubsub.publish ("exampleSub"، {exampleSub: data})؛ أينما تم إجراء هذه التغييرات ، حيث يكون exampleSub هو اسم اشتراكك والبيانات الخاصة بك هي كائنك الكامل لهذا الكيان الملتزم بمخطط GraphQL الخاص بك (في المثال أعلاه ، كل البيانات تخص هذا الشخص).

ثالثًا ، السبب في أن مستندات Apollo الرسمية تنصح بعدم استخدام PubSub في الإنتاج لأنه لا يتعدى عدد الخوادم. إذا كنت كبيرًا بما يكفي لتحتاج إلى تشغيل تطبيقك على خوادم متعددة ، فيجب عليك استخدام تطبيق PubSub الذي يدعمه ، مثل Redis أو MQTT أو RabbitMQ.

عن Pitchly

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

إذا كان لديك أي أسئلة بالنسبة لنا حول عملنا أو حياتنا أو إذا كان لديك شغف بـ GraphQL أو Meteor ، احصل على تعليق منا. نقوم بالتوظيف!

موقع - تويتر - ينكدين

جيثب