التحقق من صحة OpenAPI / Swagger على https://docs.discourse.org/openapi.json

يبدو أن ملف swagger في https://docs.discourse.org/openapi.json غير صالح.

سيناريو إعادة الإنتاج:

بعد بضع ثوانٍ، تظهر 142 خطأً في التحقق من الصحة.

لا يمكن إرفاق الملف، لكنه يشبه:

خطأ هيكلي في paths./categories.json.post.responses.200.content.application/json.schema.properties.category.properties.name.description
يجب أن يكون نصًا
الانتقال إلى السطر 184
خطأ هيكلي في paths./categories.json.post.responses.200.content.application/json.schema.properties.category.properties.color.description
يجب أن يكون نصًا
الانتقال إلى السطر 187
خطأ هيكلي في paths./categories.json.post.responses.200.content.application/json.schema.properties.category.properties.text_color.description
يجب أن يكون نصًا
الانتقال إلى السطر 190
... المزيد ...

هل توجد تعريف swagger بديل (صالح) متاح؟

التصحيح المقترح

ما يلي هو تصحيح مقترح حتى الآن.

ملخص
diff --git "a/discourse-swagger-original.json" "b/discourse-swagger.json"
index f9267f5d0..dcebe3fd8 100644
--- "a/discourse-swagger-original.json"
+++ "b/discourse-swagger.json"
@@ -578,8 +578,8 @@
                         },
                         "available_groups": {
                           "type": "array",
-                          "uniqueItems": null,
-                          "minItems": null,
+                          "uniqueItems": false,
+                          "minItems": 0,
                           "items": {
                             "type": "object"
                           }
@@ -1196,8 +1196,8 @@
                     },
                     "actions_summary": {
                       "type": "array",
-                      "uniqueItems": null,
-                      "minItems": null,
+                      "uniqueItems": false,
+                      "minItems": 0,
                       "items": {
                         "type": "object"
                       }
@@ -1788,8 +1788,8 @@
                               },
                               "actions_summary": {
                                 "type": "array",
-                                "uniqueItems": null,
-                                "minItems": null,
+                                "uniqueItems": false,
+                                "minItems": 0,
                                 "items": {
                                   "type": "object"
                                 }
@@ -1885,8 +1885,8 @@
                         },
                         "stream": {
                           "type": "array",
-                          "uniqueItems": null,
-                          "minItems": null,
+                          "uniqueItems": false,
+                          "minItems": 0,
                           "items": {
                             "type": "object"
                           }
@@ -1899,14 +1899,14 @@
                     },
                     "timeline_lookup": {
                       "type": "array",
-                      "uniqueItems": null,
-                      "minItems": null,
+                      "uniqueItems": false,
+                      "minItems": 0,
                       "items": {
                         "properties": {
                           "0": {
                             "type": "array",
                             "uniqueItems": true,
-                            "minItems": null,
+                            "minItems": 0,
                             "items": {
                               "type": "object"
                             }
@@ -3621,8 +3621,8 @@
                   "properties": {
                     "user_badges": {
                       "type": "array",
-                      "uniqueItems": null,
-                      "minItems": null,
+                      "uniqueItems": false,
+                      "minItems": 0,
                       "items": {
                         "type": "object"
                       }
@@ -3798,8 +3798,8 @@
                         },
                         "featured_user_badge_ids": {
                           "type": "array",
-                          "uniqueItems": null,
-                          "minItems": null,
+                          "uniqueItems": false,
+                          "minItems": 0,
                           "items": {
                             "type": "object"
                           }
@@ -3864,8 +3864,8 @@
                   "properties": {
                     "user_badges": {
                       "type": "array",
-                      "uniqueItems": null,
-                      "minItems": null,
+                      "uniqueItems": false,
+                      "minItems": 0,
                       "items": {
                         "type": "object"
                       }
@@ -4041,8 +4041,8 @@
                         },
                         "featured_user_badge_ids": {
                           "type": "array",
-                          "uniqueItems": null,
-                          "minItems": null,
+                          "uniqueItems": false,
+                          "minItems": 0,
                           "items": {
                             "type": "object"
                           }
@@ -4734,8 +4734,8 @@
                           },
                           "posters": {
                             "type": "array",
-                            "uniqueItems": null,
-                            "minItems": null,
+                            "uniqueItems": false,
+                            "minItems": 0,
                             "items": {
                               "type": "object"
                             }
@@ -4745,16 +4745,16 @@
                     },
                     "users": {
                       "type": "array",
-                      "uniqueItems": null,
-                      "minItems": null,
+                      "uniqueItems": false,
+                      "minItems": 0,
                       "items": {
                         "type": "object"
                       }
                     },
                     "categories": {
                       "type": "array",
-                      "uniqueItems": null,
-                      "minItems": null,
+                      "uniqueItems": false,
+                      "minItems": 0,
                       "items": {
                         "type": "object"
                       }
@@ -4773,24 +4773,24 @@
                         },
                         "post_ids": {
                           "type": "array",
-                          "uniqueItems": null,
-                          "minItems": null,
+                          "uniqueItems": false,
+                          "minItems": 0,
                           "items": {
                             "type": "object"
                           }
                         },
                         "user_ids": {
                           "type": "array",
-                          "uniqueItems": null,
-                          "minItems": null,
+                          "uniqueItems": false,
+                          "minItems": 0,
                           "items": {
                             "type": "object"
                           }
                         },
                         "category_ids": {
                           "type": "array",
-                          "uniqueItems": null,
-                          "minItems": null,
+                          "uniqueItems": false,
+                          "minItems": 0,
                           "items": {
                             "type": "object"
                           }
@@ -6406,8 +6406,8 @@
                     },
                     "owners": {
                       "type": "array",
-                      "uniqueItems": null,
-                      "minItems": null,
+                      "uniqueItems": false,
+                      "minItems": 0,
                       "items": {
                         "type": "object"
                       }
@@ -7241,8 +7241,8 @@
                           },
                           "choices": {
                             "type": "array",
-                            "uniqueItems": null,
-                            "minItems": null,
+                            "uniqueItems": false,
+                            "minItems": 0,
                             "items": {
                               "type": "object"
                             }
إعجاب واحد (1)

شكرًا لك على طرح هذا الموضوع.

لا، هذا هو ملف المواصفات الوحيد المتاح.

لقد قمت بإجراء العديد من التغييرات لنقل التوثيق من Swagger 2.0 إلى OpenAPI 3.0 في هذا الالتزام:

ولكن يبدو أن بعض الأمور تم تجاهلها أو أنها تغييرات جديدة محتملة في المواصفات.

لقد قمت بالتحقق مرة أخرى باستخدام أداة سطر الأوامر openapi-cli للتحقق من الأخطاء، وتمكنت من تكرار أخطاء مماثلة لتلك الموجودة في موقع Swagger:

blake@pop-os ~/code/discourse_api_docs (master) $ npx @redocly/openapi-cli lint openapi.json
...
❌ فشل التحقق مع 647 خطأ و579 تحذيرًا.

يبدو جيدًا. إذا كنت ترغب في تقديم ترقيع بهذه الإصلاحات، فسيكون ذلك موضع ترحيب كبير، ولكن يمكنني أيضًا المساعدة في تنظيف بعض هذه الأمور.

4 إعجابات

أهلاً وسهلاً. شكراً لانفتاحك على مراجعة المساهمة.

محرك SQL الخاص بنا يستخدم الـ API كجسر للربط مع Discourse، والجسر مبني على Swagger بدلاً من الكتابة اليدوية، لكننا ما زلنا نختبر الأمور. قد نكتشف مشكلات مثل انتهاكات القيود من حيث الطول، نوع البيانات، وقابلية القيم للفراغ.

سأكون سعيداً بتقديم تصحيح، لكنني سأنتظر بضعة أيام حتى يختبر الفريق التغييرات المقترحة بدقة أكبر. وإلا فسأستهلك الكثير من وقتك بكفاءة قليلة.

شكراً!

3 إعجابات

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

3 إعجابات

مجرد إغلاق الحلقة حول هذا الموضوع. تم إغلاق طلب السحب (PR) المُقدَّم بعد بعض المناقشة.

لكنني تابعت ذلك بـ commit أصلح مشاكل الأسطر الجديدة:

أيضًا، أردت فقط القول إننا حاليًا في عملية تحويل وثائق الـ API لتكون أكثر تكاملًا مع قاعدة كود Discourse باستخدام أداة تسمى rswag، والتي يمكنها إنشاء ملف مواصفات OpenAPI بصيغة JSON تلقائيًا. أعرف أن هناك بعض مشاكل التدقيق (linting) في الوثائق الحالية، لكنني أشعر أن طاقتنا تُستثمر بشكل أفضل في إكمال الانتقال إلى rswag، مما سيساعدنا في معالجة العديد من هذه المشاكل.

5 إعجابات

يسعدنا سماع ذلك! لا يمكننا التعامل مع ملفات *.yaml أو ما شابهها، ولكن عند ظهور Swagger جديد، يجب إجراء اختبارات واعتماد شاملين: يرجى إعلامي بذلك.

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