كيف يمكنني الحصول على external_id من كائن المستخدم؟

عند استخدامي للـ API للحصول على كائن مستخدم Discourse، يعمل كل شيء بشكل صحيح، لكنني لا أرى external_id مدرجًا ضمنه. إذا كان لدي معرف مستخدم Discourse أو اسم مستخدم، كيف يمكنني الحصول على external_id من ذلك؟

http://localhost:3000/admin/users/1/blake.erickson.json

سيحتوي على معلومات SSO:

أهلاً - لقد كنت أستدعي /users/blake.erickson.json (بدون /admin) والذي يعيد أيضاً كائن مستخدم، لكنه بدون single_sign_on_record.

مرحباً، لماذا يستقبل نقطة النهاية /users/ (فقط؟) اسم مستخدم، لكن إذا أردت الحصول على مستخدم بمعرف Discourse الخاص به، فإن المسار هو /admin/users/:id.json؟ هل هذه مجرد غرائب في تصميم واجهة برمجة التطبيقات؟

هناك غرابة أخرى: إذا استعدت مستخدماً بواسطة external_id الخاص به، باستدعاء /users/by-external/:id.json، فلن أحصل على single_sign_on_record.

إذن، واجهة برمجة التطبيقات بها بعض الغرائب… أحياناً يحتوي كائن المستخدم على خصائص single_sign_on_record، وأحياناً لا :wink:

بحكم التصميم، سيعيد نقطة النهاية الخاصة بالمسؤول بيانات أكثر من نقطة النهاية الخاصة بالمستخدمين غير المسؤولين. نعم، كلاهما يجلب سجلات “المستخدم”، ولكن سيكون أمراً سيئاً للغاية إذا كانت نقطة النهاية /user/... التي يمكن للمستخدمين العاديين استدعاؤها تعيد نفس البيانات التي تعيدها نقطة النهاية /admin/user/....

أها، لم أكن أدرك أن نقطة النهاية /user ستكون متاحة للمستخدمين الأفراد. لقد نسيت أن هناك شيئًا مثل مفاتيح واجهة برمجة التطبيقات الخاصة بالمستخدم.

أستمر في الوقوع في حيرة بسبب التناقضات. حاليًا، إذا أردت single_sign_on_record، يجب أن أعرف معرف مستخدم Discourse (حيث لا تعمل /admin/users/:username.json)… لكن معظم مكالمات واجهة برمجة التطبيقات الأخرى تبدو وكأنها تتطلب اسم المستخدم (مثل /users/:username.json).

ثم هناك نقاط نهاية واجهة برمجة التطبيقات المنفصلة التي متشابهة جدًا وتبدو متطابقة تقريبًا لكنها تُرجع نتائج مختلفة، أي أن /admin/users تمنني بيانات single_sign_on_record للمستخدم، لكن استدعاء /users/ فقط لا يفعل ذلك.

لا يمثل أي من هذا مشكلة كبيرة، فأنا أكتشف الأمور أثناء تقدمي… بمجرد أن أتقدم أكثر، قد أرى ما إذا كان بإمكاني تعديل الوثائق قليلاً وجعل بعض هذه الأمور أكثر وضوحًا.

ينبع هذا التمييز من حقيقة أن نقاط النهاية تُرجع البيانات اللازمة لعرض الصفحات في واجهة المستخدم. اطلع على ما يلي:

بالتأكيد، أفهم تماماً-- وقد استخدمت هذه الحيلة لمراقبة جميع طلبات XHR تلك. كل شيء على ما يرام. الأمر فقط… غير متسق. :wink: لكنني ممتن بلا حدود لأن لديسكورس واجهة برمجة تطبيقات قوية جداً!