تحديث منشور عبر طلب PUT في واجهة برمجة التطبيقات: طلب

فقط للتأكد من الفهم، تشير وثائق API الخاصة بـ Discourse إلى هذا النوع من… الهيكل…

{
"post[raw]": "string",
"post[raw_old]": "string",
"post[edit_reason]": "string",
"post[cooked]": "string"
}

قبل أن أحاول ذلك، هل يعني هذا، أو حسنًا… ماذا يعني بالضبط؟

هل يعني: {post: {raw: ..., raw_old: ... }}

أم ببساطة {raw: "", raw_old: ""...}؟

وكذلك، ما هو raw_old؟ تذكر الوثائق فقط أن كل عنصر هو “سلسلة” (string) مما يجب أن أضعه في جسم JSON.

أحاول ببساطة إضافة سطر في أعلى المنشور (الذي تم إنشاؤه في البداية بواسطة بوت) حيث نحتاج إلى إضافة رابط إلى موقع آخر. لاحظ أيضًا أننا نسعى إلى عرض تلك الفقرة الأولى تحت عنوان الفئة، أو في عنصر cooked

الذي سيظهر (مُعرَّف مباشرةً تحت عنوان الفئة).

آمل أن يكون هذا منطقيًا. إذا لم يكن كذلك، اطلب مني التوضيح.

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

قد يكون من المفيد أن ترى كيف يقوم Discourse بذلك عن طريق تعديل منشور مباشرة على موقعك وفحص مكالمات المتصفح:

وهذه هي الطريقة التي يعمل بها أيضًا gem discourse_api:

فقط سؤال بخصوص هذا، هل تقصد وثائق مختلفة عن تلك المُعرَّفة في Discourse API Docs سيكون ذلك مثيرًا للاهتمام… ومع ذلك، أنا أعتمد فقط على وثائق واجهة برمجة التطبيقات.

هدفي البسيط هو مجرد إضافة تعليق ورابط أسفل اسم الفئة، والذي أعتقد أن Discourse يستخرجه من المنشور الأول في موضوع “حول…”؟ أنا فقط أبحث عن ما سيتم إدراجه في عنصر

… أو ما الذي أحتاج إلى فعله لجعل منشوري يظهر هناك. هل شرحي منطقي؟

من ما ورد أعلاه، ومن خلال المحاولات، يتضح أنه لا يمكن تحديث منشور باستخدام الحقل “cooked” كما تنص وثائق API، إلا أن ذلك ممكن باستخدام الحقل “raw”. فجميع محاولاتي باستخدام “cooked” كانت تُرجع لي خطأً يفيد بأن منشوري غير صالح لأنه أقصر من 20 حرفًا، أو لأنه ليس جملة واضحة…

ومع ذلك، توجد مشكلات إضافية تتعلق بـ “raw” سأناقشها في منشور آخر، لأنها ليست مرتبطة مباشرةً بهذا الموضوع.

شكرًا لكم على كل مساعدتكم.

هناك تناقض بسيط في وثائق API:

تذكر الوثائق: PUT /posts/{id}.json مع حمولة

نوع المحتوى: application/json

{
  "post[raw]": "string",
  "post[raw_old]": "string",
  "post[edit_reason]": "string",
  "post[cooked]": "string"
}

لكن هذا يعمل فقط مع PUT /posts/{id} و Content-Type: application/x-www-form-urlencoded.

يجب أن تكون الحمولة الصحيحة لـ PUT /posts/{id}.json كالتالي:

نوع المحتوى: application/json

{
  "post": {
      "raw": "string",
      "raw_old": "string",
      "edit_reason": "string",
      "cooked": "string"
    }
}

معامل raw كافٍ لاستبدال المنشور بالكامل.

نعم، شكرًا لك، لقد أدركت ذلك بعد تجربة بعض طلبات Postman والتجربة بها… كما أنه في محاولاتي، بدا أن “cooked” لا يفعل شيئًا… وما زلت غير متأكد مما يعنيه “raw_old”.

تم تصعيد هذا اليوم وتم تعييني له. ربما يمكن إلغاء تعييني :slight_smile:
على أي حال، الوثائق صحيحة الآن: https://docs.discourse.org/#tag/Posts/operation/updatePost.