تغييرات في بنية استجابة API /admin/users/list/all.json؟

هل يعرف أحد ما إذا كانت استجابة واجهة برمجة التطبيقات (API) لنقطة النهاية /admin/users/list/all.json قد تغيرت في الأسبوع الماضي تقريبًا؟ :thinking:

على وجه التحديد:

GET /admin/users/list/all.json?email=email@example.com

:thinking:

أعتقد أن هذه النقطة النهاية كانت تُرجع كائن JSON مسطحًا يمثل مستخدمًا واحدًا مباشرة عند الاستعلام بعنوان بريد إلكتروني مطابق.

ومع ذلك، يبدو أن بنية الاستجابة الحالية تقوم الآن بتغليف كائن المستخدم داخل مصفوفة users جديدة، مما أدى إلى تعطل بعض عمليات تكامل تسجيل الدخول الموحد (SSO) الحالية لدينا.

إليك مثال زائف مجهول الهوية للاستجابة لما أعتقد أنه قد تغير “قبل” و “بعد” كمرجع.

قديم:

{
  "id": 1,
  "username": "sampleuser",
  "name": "",
  "avatar_template": "/user_avatar/example.com/sampleuser/{size}/avatar.png",
  "active": true,
  "admin": false,
  "moderator": false,
  "last_seen_at": "2025-05-11T08:27:28.578Z",
  "created_at": "2020-01-01T12:00:00.000Z",
  "suspended": false,
  "trust_level": 1
}

جديد:

{
  "users": [
    {
      "id": 1,
      "username": "sampleuser",
      "name": "",
      "avatar_template": "/user_avatar/example.com/sampleuser/{size}/avatar.png",
      "email": "someone@example.com",
      "active": true,
      "admin": false,
      "moderator": false,
      "last_seen_at": "2025-05-11T09:34:35.900Z",
      "created_at": "2020-01-01T12:00:00.000Z",
      "suspended": false,
      "trust_level": 1
    }
  ],
  "meta": {
    "message_bus_last_ids": {
      "bulk_delete": 0
    }
  }
}

هل يعرف أحد أي التزام حديث قد يكون تسبب في هذا التغيير؟ :thinking:

لقد تغير بالفعل والالتزام هو هذا

diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 92d906f161..70406efce5 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -32,7 +32,16 @@ class Admin::UsersController < Admin::StaffController
   def index
     users = ::AdminUserIndexQuery.new(params).find_users

-    opts = { include_can_be_deleted: true, include_silence_reason: true }
+    opts = {
+      include_can_be_deleted: true,
+      include_silence_reason: true,
+      root: :users,
+      meta: {
+        message_bus_last_ids: {
+          bulk_delete: MessageBus.last_id("/bulk-user-delete"),
+        },
+      },
+    }
     if params[:show_emails] == "true"
       StaffActionLogger.new(current_user).log_show_emails(users, context: request.path)
       opts[:emails_desired] = true

5 إعجابات

لم يؤدِ البحث في 73 التزامًا قمت بتحديثها بالأمس إلى العثور على هذا التغيير الذي يسبب مشكلة DEV: replace selenium driver with playwright.

شكرًا على الرابط @RGJ

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

نهجي:

  • تحميل /admin/users/list/all.json?email=email@example.com
  • التحقق من ترويسة x-discourse-route
  • البحث عن الملف المقابل (app/controllers/admin/users_controller.rb)
  • البحث عن الدالة المقابلة (index)
  • الضغط على “Blame”
  • تحديد الـ commit

5 إعجابات

لااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااااا

إعجابَين (2)

تمكنت من العثور على هذا الالتزام بطريقة ما، لكنني لم أتمكن من رؤية (ولا أزال لا أرى) أين قام بتغيير بنية البيانات (كنت على هاتفي، مما جعل الأمور أصعب قليلاً).

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

أعتقد أن هذا كان التغيير الذي أحدث فجوة في استجابة واجهة برمجة التطبيقات :confused:

في /app/assets/javascripts/admin/addon/controllers/admin-users-list-show.js

إنه السطر root: :users الذي تمت إضافته.

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

لقد تعافينا الآن من تأثير هذا التغيير.

ربما أخرج عن الموضوع قليلاً هنا ولكن هل هناك طريقة لتتبع هذه الأنواع من التحديثات حتى أتمكن من إخطار نفسي عندما يتغير رد واجهة برمجة التطبيقات (API) من “س”، بعد أن كان “ص” لسنوات عديدة؟ :thinking:

نوع من اختبارات الوحدة المحلية المكتوبة التي يمكنني تشغيلها يوميًا ربما؟

على الرغم من أنني قلت ذلك بصوت عالٍ الآن، إلا أن ذلك لن يخطرني إلا بعد أن أقوم بتحديث Discourse الخاص بي وأن ذلك قد أفسد التكاملات.

بيئة اختبار على ما أعتقد…

يمكنك الحصول على بيئة اختبار. قد تقوم أيضًا بإنشاء إجراء GitHub للكود الخاص بك يبدأ discourse ويشغل اختبارًا مقابل أحدث discourse كل يوم.

إعجابَين (2)

آها! ممتاز، هذا سيعمل، شكرًا لك :grin:

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

أعتقد أن المكون الإضافي الذي يستدعي نقطة النهاية ويعرضها يمكن أن يكون طريقة سهلة للاختبار. ثم تغيير الإجراء الافتراضي في GitHub ليتم تشغيله يوميًا بدلاً من التشغيل عند الدفع فقط.

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

يبدو أن الوثائق تحتاج إلى تحديث أيضًا \u003chttps://docs.discourse.org/#tag/Admin/operation/adminListUsers\u003e

في عالم مثالي، سيتم إنشاء الوثائق تلقائيًا من المصدر ويمكننا فقط إلقاء نظرة على سجل الالتزام الخاص بالوثائق، والذي سيحتوي فقط على التغييرات في الواجهة.

4 إعجابات

هذا ما أربكني أيضًا عند محاولة حل المشكلات التي سببتها هذه التغييرات :confused:

لقد أدى هذا أيضًا إلى تعطيل تكامل لدينا - هل هذا شيء يجب أن نتوقعه أن يتم التراجع عنه؟

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

أهلاً، نعم، آسف، لم يكن ينبغي دمج هذا، لقد كان خطئي.

لكن الخبر السار هو أنني قمت بالفعل بالتراجع عنه قبل 8 ساعات: DEV: revert admin users list change (#32723) · discourse/discourse@7558e2c · GitHub

3 إعجابات

لاااااااااااا… (كرر ليختفي)

[اقتباس=“joffreyjaffeux، المنشور:19، الموضوع:365629”]
suu الخبر السار هو
[/اقتباس]

هذه أخبار سيئة جدًا :البكاء:

سيتعين علينا تغيير جميع عمليات التكامل لدينا مرة أخرى :انفجار_الرأس:

آسف على ذلك، مع الأسف لم يكن لدي خيار سوى التراجع، لقد وقعت على توقيت غير مناسب.

إعجابَين (2)

سبب جيد لطلب دمج (PR) من @Richie لأنه على أمل أن يوجد زر تراجع بسيط.

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

هذه المخاطرة التي نتحملها والثمن الذي ندفعه لنعيش على الحافة : blush:

لا زلت مدهوشًا من أن Discourse هو مصدر مفتوح، حقًا يفعل ذلك. من أنا لأشتكي : person_shrugging:

شكرًا لك على إصلاح المشكلة @joffreyjaffeux : clap: : person_bowing:

4 إعجابات