الخدمات الموحدة goszakup.gov.kz - الإصدار 2

أعمل كمطور في مركز الشركة للتمويل الإلكتروني JSC.
أحد مشاريعنا هو بوابة المشتريات العامة لجمهورية كازاخستان - goszakup.gov.kz.

قبل عام ، أطلقنا مشروعًا كبيرًا - الخدمات الموحدة (OpenData).
للتنفيذ ، تم استخدام منهجية RestAPI.

سأتحدث اليوم عن الإصدار الجديد من خدماتنا والواجهة الجديدة للعمل معهم.



قمنا بتطوير وإطلاق 6 خدمات بيانات مفتوحة:

  • سجل المشاركين
  • سجل الموردين عديمي الضمير
  • سجل الخطط السنوية
  • اعلانات الدولة. المشتريات
  • تسجيل الكثير
  • سجل العقود

تقوم العديد من الشركات في كازاخستان بالفعل بربط واستقبال البيانات الخاصة بهذه الخدمات.
سمح لنا إطلاق البيانات المفتوحة بتقليل تحميل قاعدة البيانات بحوالي 40 ٪ بسبب حقيقة أن الشركات لا تحتاج إلى كتابة مختلف المحللون لجمع البيانات عن المشتريات العامة. يكفي البحث عن مسعى صعب :)

  1. إرسال طلب للحصول على رمز وصول
  2. اقرأ الوثائق الخاصة بالخدمات على بوابة goszakup.gov.kz/ru/developer/ows الخاصة بنا
  3. اكتب عميل RestAPI الخاص بك

الخدمات الموحدة - نهج جديد


يتيح RestAPI الحصول على البيانات بسهولة أكبر وبسرعة أكبر من تحليل الموقع ، لكن RestAPI القياسي لا يمنح الشركات المرونة وبناء اتصال مع الكائنات التي يجب عليك الحصول عليها جميع البيانات أولاً وبعد ذلك فقط بناء الروابط بينهما.
من أجل الحصول على بيانات عن إعلان ما ، من الضروري من قبل RestAPI أن تطلب أولاً تسجيل الإعلانات ، ثم تسجيل القرعة وأخيراً سجل الخطط. هذا يعني أنه لتلقي إعلان واحد ، من الضروري إكمال 3 طلبات على الأقل ، وإذا كنت بحاجة إلى تلقي بيانات عن 50 إعلانًا ، فستحتاج إلى 101 طلب على الأقل إلى RestAPI ، شريطة أن يكون لكل إعلان 1 لوت (واحد لتلقي 50 إعلانًا ، و 50 لاستلام الكثير ، و 50 إلى استلام نقاط الخطة).

لقد وجدنا طريقة لخفض هذا المبلغ إلى طلب واحد!

نطلق الإصدار الثاني من الخدمات الموحدة - ows.goszakup.gov.kz/v2 .
بالإضافة إلى توسيع مجموعات البيانات ، نقوم بتوسيع القدرة على العمل مع API لدينا.

الآن يمكن الحصول على البيانات عبر RestAPI والواجهة الجديدة - GraphQL.
ows.goszakup.gov.kz/v2/graphql



لن أصف ما هو GraphQL ، لذلك يمكنك قراءة مقالة aliksend - ما هو GraphQL هذا؟

سأخبرك بالمزايا التي حصلنا عليها بعد بدء تشغيل GraphQL:

  • طلب المرونة
  • الحصول على الكائنات ذات الصلة ؛
  • الكتابة الكاملة للطلبات والاستجابات ؛
  • واجهة جديدة للبحث عن البيانات.

طلب المرونة


مع طلب RestAPI البسيط ، يمكنك الحصول على تنسيق البيانات الذي تم تقديمه مسبقًا.
عند الاستعلام عن GraphQL ، تحصل على البيانات بالتنسيق الذي تحتاجه.

عند طلب البيانات ، أنت نفسك تحدد تنسيق البيانات التي تحتاجها ، على سبيل المثال ، المعرف و

رقم العقد

{ contract { id contract_number_sys } } 

استجابة لذلك ، نحصل على هذه البيانات فقط:

 { "data": { "contract": [ { "id": 1, "contract_number_sys": "_" } ] } } 

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



استرداد الكائنات ذات الصلة


لم نتوقف عن تكرار وظيفة RestAPI ببساطة عن طريق إتاحة تحديد البيانات جزئيًا.

لقد قمنا بتطبيق الميزة الثانية لعلاقات كائن GraphQL.

إذا تلقيت بيانات وفقًا لـ RestAPI ، من أجل الحصول على بيانات عن العقد وعن الشركة ، فسيحتاج العميل في العقد أولاً إلى الحصول على البيانات من سجل المشاركين ، وعندها فقط يتلقى البيانات من سجل العقود وبناء الاتصال بين الكائنات أنفسهم.

الآن ، عند العمل مع GraphQL ، لا تحتاج إلى تلقي البيانات بالكامل من سجل المشتركين ، فقط اطلب البيانات بالتنسيق الذي ترغب فيه:

 { contract { id contract_number_sys customer { name_ru } } } 

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

 { "data": { "contract": [ { "id": 1, "contract_number_sys": "_", "customer" : { "name_ru": " " } } ] } } 



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

حاولت إظهار بنية الاتصال التي تمكنت من تحقيقها جزئيًا.



طلبات الكتابة والردود


لقد وضع العديد من مؤيدي طلبات SOAP دائمًا أهم كتابة للبيانات.
RestAPI ، بخلاف SOAP ، لا يحتوي على وصف لهيكله ولا تعرف مقدمًا نوع البيانات. لكن GraphQL يغير كل شيء.

يمكنك الآن طلب البيانات من GraphQL خلال نظام البيانات وستتلقى:

  • وصف كامل لهيكل البيانات ؛
  • وصف الحقل الذي يحتوي على نوع بيانات (Int و String و Boolean) ؛
  • وصف الكائنات المتداخلة وبنية الحقل للكائنات المتداخلة ؛
  • وصف مفصل ، على سبيل المثال ، باللغة الروسية لكل حقل ؛
  • تلقي إشعارًا بأن بعض الحقول قد تلقت العلامة المهملة مع وصف.

يمكنني استخدام برنامج Insomnia REST Client - insomnia.rest للعمل مع GraphQL
عند العمل مع GraphQL ، يتلقى هيكل الكائنات بالكامل ويطالبك عند إنشاء استعلام.

سأقدم بضع لقطات كمثال.

1. مساعدة في بناء الاستفسارات منذ ذلك الحين تلقى البرنامج بنية كاملة من الكائنات



2. تلميح لوصف كل حقل مع نوع البيانات والوصف



3. تلميح إذا تلقى بعض الحقول العلم - مهملة



وتتيح لك ميزة GraphQL هذه الحصول على صورة كاملة عن الحقول والكائنات التي تعمل معها.



واجهة جديدة لاسترجاع البيانات


وتركت الأكثر إثارة للاهتمام في النهاية.

يبدو أن كل شيء رائع ، فمن الممكن بناء بنية البيانات الخاصة بك ، هناك اتصال مع كائنات أخرى ، تتم كتابة جميع البيانات. ولكن لا يزال هناك شيء مفقود ...

لا توجد فرصة كافية للبحث عن هذه البيانات.

من البداية ، تم تنفيذ تنسيق البحث مع المعلمات في الطلب نفسه:

 { trd_buy(ref_buy_status_id: 1) { name_kz name_ru } } 

ولكن هنا واجهت عددًا من المشكلات:

  1. مع وجود عدد كبير من معايير البحث ، يصبح الاستعلام غير قابل للقراءة ؛
  2. يستحيل تحديد الصفيف عند البحث عن بيانات للبحث عن العديد من المتغيرات لنفس الحقل.

لتبسيط بناء الاستعلامات وتوسيع قدرة البحث ، قمت بتنفيذ كائنات متداخلة لتصفية البيانات.

نحدد متغير في الطلب يشير إلى كائن التصفية.

 query($filter: TrdBuyFiltersInput){ trd_buy(filters: $filter) { name_kz name_ru } } 

وصفنا معلمات البحث عن البيانات بأنفسهم:

 { "filter": { "ref_buy_status_id": [1, 2] } } 

ونتيجة لذلك ، سوف نتلقى جميع الإعلانات التي لها حالتان 1 و 2.

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



علاوة على ذلك ، في مخطط GraphQL نفسه ، لدينا جميعًا وصف لكائن البحث هذا:



الخدمات الموحدة - الإصدار 2.0:


خدمات العمل:

  • سجل المشاركين
  • سجل الإعلانات
  • سجل العقود
  • سجل الأفعال
  • تسجيل الكثير
  • سجل الخطط السنوية
  • سجل الموردين عديمي الضمير

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

لم نفقد سرعة الحصول على البيانات ، لكننا قللنا بسبب ذلك عدد الطلبات اللازمة للحصول على البيانات.

تمكنا من التحذير في مخطط البيانات حول الحقول المعطلة أو المعاد تسميتها.

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

Source: https://habr.com/ru/post/ar441438/


All Articles