لقد كنت أعاني من العثور على حل لهذه المشكلة، وآمل أن يكون لدى أحدهم هنا بعض الأفكار. انضممت مؤخرًا إلى مشروع جديد واستلمت العمل من مطور سابق. قمت مؤخرًا بترقية إصدار Discourse إلى أحدث نسخة، حيث كان متخلفًا عدة أشهر، وكل ميزة أخرى واستدعاء API يعمل كما هو متوقع.
ما أحاول فعله هو استخدام API لإنشاء موضوع في Discourse من موقعنا الإلكتروني خارج منصة Discourse. آخذ معرف المستخدم وأبحث عنه في Discourse باستخدام طريقة DiscourseAPI by_external_id. بمجرد الحصول على ذلك، أستدعي generate_user_api_key(discourse_user[‘id’]) والتي تمرر معرف المستخدم في Discourse.
هذا الاستدعاء يستجيب بخطأ DiscourseApi::NotFoundError / 404، وهو خطأ بدأ يظهر فقط بعد الترقية.
تغير المسار الخاص بتوليد مفاتيح واجهة برمجة التطبيقات (API)، لكن الطريقة المستخدمة في مكتبة Discourse API لتوليد مفتاح واجهة برمجة التطبيقات لا تزال تستدعي المسار القديم. ولهذا السبب تحصل على خطأ 404.
سنقوم بإصلاح هذه المشكلة. وفي الوقت الراهن، إذا كنت ترغب في توليد مفتاح واجهة برمجة التطبيقات لمستخدم، يمكنك فعل ذلك بإرسال طلب POST إلى http://localhost:3000/admin/api/keys. إليك مثال على طلب CURL. لقد استبدلت مفتاح واجهة برمجة التطبيقات الفعلي بـ $api_key في المثال:
لا تحتاج إلى توليد مفتاح واجهة برمجة التطبيقات لمستخدم للقيام بذلك. بدلاً من ذلك، يمكنك تعيين client.api_username إلى اسم المستخدم الذي تريد استخدامه لنشر المنشور:
client.api_username = "susan"
client.create_topic(category: 5, title: "موضوع واجهة برمجة التطبيقات الرائع الخاص بسوزان", skip_validation: true, raw: "هذا اختبار، هذا مجرد اختبار")
client.api_username = "bobby"
client.create_topic(category: 5, title: "موضوع واجهة برمجة التطبيقات الرائع الخاص ببوبي", skip_validation: true, raw: "هذا اختبار، هذا مجرد اختبار")
سيكون هذا العمل صحيحًا طالما أنك استخدمت مفتاح واجهة برمجة التطبيقات “جميع المستخدمين” عند إنشاء client.
لقد قمت بتحديث الكود الخاص بي لاستخدام مفتاح “جميع المستخدمين” بدلاً من إنشاء مفتاح لكل مستخدم، وقمت بتمرير اسم المستخدم الخاص بالمستخدم كـ api_username، وقد نجح ذلك.