العثور على عملية
المخطط هو المرجع المعتمد للمجموعة الفرعية المدعومة من 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هو طفرة لأنه يبدأ مهمة تصدير.
إنشاء منشور
يأخذcreatePost وسيطًا واحدًا هو input، لذا فإن المنشور بأكمله كائن واحد:
أنواع الوسائط
معظم الوسائط سلاسل نصية وأرقام وقيم منطقية عادية. وهناك ثلاث حالات تستحق المعرفة.التعدادات
كثير من الوسائط النصية ذات المجموعة المغلقة من القيم المدعومة هي تعدادات 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 كسلاسل نصية أو أرقام.
JSON ليس ثغرة: إذ يتحقق منه المُحلِّل قبل الإرسال، لذا تُرجع القيمة غير الصالحة خطأ تحقق ولا تستهلك أي استدعاء API.
الوسائط الاختيارية والقيم الفارغة
بالنسبة إلى الوسائط الاختيارية والحقول الاختيارية داخل كائنات الإدخال، تُعامَل القيمةnull الصريحة كأنها محذوفة. أما العناصر الفارغة داخل القوائم فيُحتفظ بها عندما يسمح نوع القائمة بذلك.
قراءة الاستجابات
تُرجع معظم العمليات قيمة قياسية (scalar) من النوعJSON تحتوي على غلاف استجابة REST الكامل، لذا حدّد الحقل الجذري دون حقول فرعية. يُرجع createPost حاليًا PostResult ذا نوع محدد، لذا حدّد حقوله:
PostResult أيضًا الحقل raw: JSON!، الذي يحتوي على استجابة REST الكاملة دون تعديل:
raw دائم، ووُجد حتى لا يتعذر أبدًا الوصول من GraphQL إلى حقل جديد يظهر في استجابة REST ريثما نُضيف نوعه. إذا احتجت إلى شيء لا تعرضه الحقول ذات الأنواع المحددة، فاطلب raw.
رفع الوسائط
لا يمكن لبايتات الوسائط أن تنتقل عبر طلب GraphQL. طلب GraphQL هو مستند JSON واحد بحد أقصى 64 KB، لذا لا يوجد حقل يقبل ملفًا، كما أن ترميز صورة بصيغة base64 داخل الاستعلام سيتجاوز هذا الحد لأي شيء أكبر من صورة مصغّرة. يتجنب المسار المدعوم هذه المشكلة تمامًا، وهو أسرع من الرفع عبر واجهة API في كل الأحوال، لأن البايتات تذهب مباشرة إلى التخزين:-
اطلب عنوان URL للرفع:
-
اقرأ
data.mediaUploadUrl.uploadUrlوaccessUrlوcontentTypeمن JSON المُرجَع. -
نفّذ
PUTلملفك مباشرة إلىuploadUrl، وليس إلى Ayrshare API، مع تعيين ترويسةContent-Typeللطلب إلى قيمةcontentTypeالمُرجَعة. -
بعد نجاح الرفع، مرّر
accessUrlفيcreatePost.input.mediaUrls:
uploadUrl كبيانات اعتماد كتابة قصيرة الأجل، ولا تسجّله أو تكشفه. أما accessUrl فهو عنوان URL للوسائط المستخدم عند إنشاء المنشور.
يمكنك أيضًا الاستمرار في استخدام نقاط نهاية الرفع في REST والإشارة إلى عناوين URL الناتجة من GraphQL. تتشارك الواجهتان مكتبة الوسائط نفسها.
اقرأ التالي
- الأخطاء: رموز حالة HTTP، وأشكال الأخطاء، والنجاح الجزئي.
- الحدود والفوترة: الحدود القصوى لحجم الاستعلام وكيفية احتساب الطلبات.