Skip to main content

العثور على عملية

المخطط هو المرجع المعتمد للمجموعة الفرعية المدعومة من GraphQL: جذور العمليات وأسماؤها ووسائطها وأنواع الإدخال وقيم التعدادات. تقدّم الأوصاف إرشادات الاستخدام، ويعرض GraphQL Explorer كليهما. أما الإمكانات المتاحة في REST فقط، فاستخدم لها مرجع REST API. تتبع أسماء العمليات نقاط نهاية REST التي تصل إليها، بصيغة camelCase. فـ GET /history هو postHistory، وGET /analytics/social هو socialAnalytics، وPOST /post هو createPost.

الاستعلامات للقراءة، والطفرات للكتابة

الاستعلامات (queries) هي عمليات قراءة وتحقق لا تُغيّر شيئًا لدينا. أما الطفرات (mutations) فتنشر أو تُغيّر الحالة، أو تبدأ عملًا، أو ترسل بريدًا إلكترونيًا. لا يحدد فعل HTTP في REST ولا تكلفة الاستدعاء الجذرَ المناسب:
  • يتحقق validatePost من منشور دون نشره.
  • يتحقق validateMedia من إمكانية الوصول إلى عنوان URL للوسائط.
  • generatePost هو استعلام لأنه لا يتغير شيء لدينا. لكنه لا يزال يُحتسب كاستدعاء API ويُرجع نصًا مختلفًا في كل مرة، لذا تأكد من أن ذاكرة التخزين المؤقت لدى العميل أو إعادة الجلب التلقائية لا تكرره دون أن تلاحظ.
  • mediaUploadUrl هو طفرة لأنه يُنشئ عنوان URL للرفع خاصًا بحسابك.
  • linkAnalytics هو طفرة لأنه قد يطلب تقريرًا يُرسَل عبر البريد الإلكتروني.
  • userBatch هو طفرة لأنه يبدأ مهمة تصدير.
استخدم Explorer أو المخطط للتأكد من الجذر الخاص بكل عملية مدعومة.

إنشاء منشور

يأخذ createPost وسيطًا واحدًا هو input، لذا فإن المنشور بأكمله كائن واحد:
يعكس الإدخال نقطة نهاية النشر في REST الموثّقة، بما في ذلك كائنات الخيارات الخاصة بكل شبكة وصيغ REST التي تقبل أكثر من شكل JSON:
قد ينجح المنشور على شبكة ويفشل على أخرى. هذا ليس فشلًا في الطلب؛ راجع الأخطاء.

أنواع الوسائط

معظم الوسائط سلاسل نصية وأرقام وقيم منطقية عادية. وهناك ثلاث حالات تستحق المعرفة.

التعدادات

كثير من الوسائط النصية ذات المجموعة المغلقة من القيم المدعومة هي تعدادات GraphQL، وتُكتب دون علامات اقتباس وبأحرف كبيرة:
وليس "instagram". يربط الخادم كل تعداد مقبول بالقيمة الدقيقة التي تتوقعها وحدة تحكم REST الأساسية، وهي غالبًا، لكن ليس دائمًا، سلسلة بأحرف صغيرة. يُرفض التعداد غير الصالح أثناء التحقق في GraphQL قبل تنفيذ العملية، لذا لا يكلّفك الخطأ الإملائي شيئًا. تتشارك بعض الوسائط الاسم نفسه عبر العمليات لكنها تقبل قيمًا مختلفة، لأن نقاط النهاية تختلف فعلًا. يقبل reviews(platform:) القيمتين GMB وFACEBOOK فقط، لأنهما الشبكتان الوحيدتان اللتان تحتويان على مراجعات. سيعرض الإكمال التلقائي في عميلك المجموعة الصحيحة لكل عملية.

النوع القياسي (scalar) JSON

بعض الوسائط من النوع JSON بدلًا من نوع محدد. يحدث ذلك عندما يكون للقيمة بشكل مشروع أكثر من شكل ولا يمكن لنوع GraphQL واحد وصفها بدقة:
  • يقبل explainError(code:) القيمة 215 أو “215”، لأن العملاء يحتفظون برموز الأخطاء بالصيغتين.
  • يستخدم createPost(input:) صيغة JSON لحقول مثل post وmediaUrls، والتي يمكن أن تكون قيمًا مشتركة أو كائنات خاصة بكل منصة.
  • يأخذ createAutomation(triggers:, actions:) مصفوفات تعتمد حقولها على type الخاص بكل عنصر.
  • يقبل boostFacebookPost(interests:) معرّفات اهتمامات Meta كسلاسل نصية أو أرقام.
مرّر القيمة نفسها التي كنت سترسلها في جسم REST المقابل. الوسيط من نوع JSON ليس ثغرة: إذ يتحقق منه المُحلِّل قبل الإرسال، لذا تُرجع القيمة غير الصالحة خطأ تحقق ولا تستهلك أي استدعاء API.

الوسائط الاختيارية والقيم الفارغة

بالنسبة إلى الوسائط الاختيارية والحقول الاختيارية داخل كائنات الإدخال، تُعامَل القيمة null الصريحة كأنها محذوفة. أما العناصر الفارغة داخل القوائم فيُحتفظ بها عندما يسمح نوع القائمة بذلك.

قراءة الاستجابات

تُرجع معظم العمليات قيمة قياسية (scalar) من النوع JSON تحتوي على غلاف استجابة REST الكامل، لذا حدّد الحقل الجذري دون حقول فرعية. يُرجع createPost حاليًا PostResult ذا نوع محدد، لذا حدّد حقوله:
تتضمن أنواع الاستجابة ذات الأنواع المحددة مثل PostResult أيضًا الحقل raw: JSON!، الذي يحتوي على استجابة REST الكاملة دون تعديل:
الحقل raw دائم، ووُجد حتى لا يتعذر أبدًا الوصول من GraphQL إلى حقل جديد يظهر في استجابة REST ريثما نُضيف نوعه. إذا احتجت إلى شيء لا تعرضه الحقول ذات الأنواع المحددة، فاطلب raw.

رفع الوسائط

لا يمكن لبايتات الوسائط أن تنتقل عبر طلب GraphQL. طلب GraphQL هو مستند JSON واحد بحد أقصى 64 KB، لذا لا يوجد حقل يقبل ملفًا، كما أن ترميز صورة بصيغة base64 داخل الاستعلام سيتجاوز هذا الحد لأي شيء أكبر من صورة مصغّرة. يتجنب المسار المدعوم هذه المشكلة تمامًا، وهو أسرع من الرفع عبر واجهة API في كل الأحوال، لأن البايتات تذهب مباشرة إلى التخزين:
  1. اطلب عنوان URL للرفع:
  2. اقرأ data.mediaUploadUrl.uploadUrl وaccessUrl وcontentType من JSON المُرجَع.
  3. نفّذ PUT لملفك مباشرة إلى uploadUrl، وليس إلى Ayrshare API، مع تعيين ترويسة Content-Type للطلب إلى قيمة contentType المُرجَعة.
  4. بعد نجاح الرفع، مرّر accessUrl في createPost.input.mediaUrls:
تعامل مع uploadUrl كبيانات اعتماد كتابة قصيرة الأجل، ولا تسجّله أو تكشفه. أما accessUrl فهو عنوان URL للوسائط المستخدم عند إنشاء المنشور. يمكنك أيضًا الاستمرار في استخدام نقاط نهاية الرفع في REST والإشارة إلى عناوين URL الناتجة من GraphQL. تتشارك الواجهتان مكتبة الوسائط نفسها.
  • الأخطاء: رموز حالة HTTP، وأشكال الأخطاء، والنجاح الجزئي.
  • الحدود والفوترة: الحدود القصوى لحجم الاستعلام وكيفية احتساب الطلبات.