تعذر قفل المنشور باستخدام واجهة برمجة التطبيقات

أقوم بإجراء استدعاءين لواجهة برمجة التطبيقات (API) من تطبيقي إلى Discourse لتعديل المشاركات.

في الاستدعاء الأول، أقوم بتحرير المشاركة. هذا يعمل بشكل رائع. في الاستدعاء التالي، أحاول قفل المشاركة.

يبدو استدعاء قفل المشاركة الخاص بي من JavaScript كالتالي:

fetch(`https://forum.hollowverse.com/posts/1817/locked.json`, {
  method: 'PUT',
  headers: {
    'Api-Key': process.env.DISCOURSE_SYSTEM_PRIVILEGE_SECRET,
    'content-type': 'application/json',
    'Api-Username': 'hollowbot',
  },
  body: JSON.stringify({locked: true}),
});

عندما أقوم بتشغيل هذا الاستدعاء، يستجيب لي Discourse بـ {locked: false}.

لقد حاولت قفل المشاركة يدويًا وفحص استدعاء واجهة برمجة التطبيقات (API) الذي يقوم به عميل Discourse، ويبدو مشابهًا جدًا للاستدعاء الذي أقوم به من تطبيقي، باستثناء طريقة المصادقة، ربما.

لست متأكدًا مما يحدث، أي أفكار؟

لا أرى مشكلة واضحة. هل حصلت على ذلك باتباع كيفية هندسة واجهة برمجة تطبيقات Discourse العكسية؟ هذا ما سأفعله للمساعدة إذا كنت على جهاز الكمبيوتر الخاص بي.

إعجاب واحد (1)

تم توثيق واجهة برمجة التطبيقات (API) لقفل منشور هنا Discourse API Docs ولكن نعم، لقد حاولت أيضًا هندسة عكسية لكيفية قيام عميل Discourse بذلك، ويبدو الأمر مشابهًا جدًا للطريقة التي أقوم بها من تطبيقي.

إعجاب واحد (1)

الكود هو
params[:locked] === "true" ? locker.lock : locker.unlock

والذي يبدو أنه يقوم بمقارنة سلسلة نصية.

هذا يعني أنك ستحتاج إلى إرسال "locked": "true" وليس "locked": true وأن الوثائق أو الكود سيحتاج إلى تحديث ليعكس هذا السلوك أو لتغييره.

المتصفح لا يرسل طلب JSON، بل يرسل Content-Type: application/x-www-form-urlencoded والذي سيقوم بتفسير المعلمة كسلسلة نصية، وهذا هو سبب عملها في المتصفح.

إعجابَين (2)

شكراً لمساعدتك يا ريتشارد!

تعلمت شيئاً جديداً اليوم!

وسأقوم بالبحث في تقديم تحديث للوثائق.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.