GH GambleHub

بطانة واجهة برمجة التطبيقات والتحليل الثابت

1) لماذا ربط واجهة برمجة التطبيقات

API - عقد بين الفرق والمتكاملين الخارجيين. التحميل والتحليل الثابت:
  • منع التغييرات غير المتوافقة والضمنية
  • وتوحيد الأوضاع والأخطاء والتجميع والأمن ؛
  • وجعل المواصفات قابلة للتحقق منها آلياً وإطلاقها قابلاً للتنبؤ ؛
  • تقليل تكلفة المراجعة ووقت الصعود.

المبدأ: "تفحص العقود تلقائيا ؛ العلاقات العامة بدون وصلة خضراء لا تصمد"


2) مرافق التبطين

1. العقود: OpenAPI/AsyncAPI/GraphQL SDL، Protobuf/Avro/JSON Schema.
2. التنفيذ: أقلام REST/gRPC، البرامج الوسيطة، رموز الحالة/الرؤوس.
3. البنية التحتية: رؤوس أمنية، حدود، سياسات التخزين المؤقت.
4. القطع الأثرية ذات الصلة: أمثلة، مجموعات ساعي البريد، مخططات الخطأ.


3) القواعد الأساسية لـ HTTP API (الملف الشخصي الموصى به)

3. 1 التدوين وعنوان URL

snake_case في أجسام JSON، أو حالة كباب في المسارات، أو حالة كباب موحدة/'/v1/... '.
الموارد - الجمع: '/v1/المدفوعات '، متداخلة - '/v1/wallets/{ id }/المعاملات'.
المعرفات على أنها مسار بارام: '/v1/payments/{ payment _ id} '(النوع: سلسلة، تنسيق: uid).

3. 2 الطرق والأوضاع

"احصل" - 200/206 ؛ " POST' - 201 (+ 'الموقع')، النزاعات - 409 ؛ المصادقة - 422 ؛ حدود - 429 (+ «إعادة المحاولة بعد»).
لا تعيد 200 للأخطاء. استفسارات مشروطة - 304 بواسطة «If-None-Match».

3. 3 أخطاء (شكل واحد)

json
{ "code":"validation_error", "message":"amount must be ≥ 1", "trace_id":"...", "details":[{"field":"amount","reason":"min:1"}] }

مطلوب: 'رمز'، 'رسالة'، 'تتبع _ معرف' ؛ locale - via 'Content-Language'.

3. 4 فلاتر/فلاتر

قائمة على المؤشر: «page _ size», «page _ token», ответ: «next _ page _ token».
المرشحات والفرز - تم توثيق القوائم البيضاء في «المعلمات».

3. 5 السلامة

المخطط الأمني الموحد: النطاقات OAuth2/OIDC أو نظام التحليل اللوجستي ؛ إنكار "http" (فقط "https').
لا تعيد الرؤوس الحساسة، قناع الرموز في الأمثلة.

3. 6 القيود والأبعاد

العنوان/حدود الجسم: 413/414/431 ؛ توثيق القيم القصوى المسموح بها.


4) الأدوات والنظام الإيكولوجي

4. 1 OpenAPI

Spectral (JSON/YAML lint), Redocly linter, oas-diff/openapi-diff (semantic diff), schemathesis/dredd (checks in progress).

4. 2 Protobuf/gRPC

buf (الوبر + كسر الفحص)، البروتولينت، مولدات SDK ؛ غنوصي للتحليل.

4. 3 رسم بياني QL

graphql-schema-linter, graphql-inspector (breaking).

4. 4 محددات الكود و SAST

ESLint، golangci-lint، Detekt/Ktlint، Pylint/Flake8، Semgrep (رائحة API ونماذج الأمان).


5) أمثلة القاعدة: الطيف/Redocly

5. 1 الطيف (مثال 'الطيف. yaml ')

yaml extends: ["spectral:oas", "spectral:asyncapi"]
rules:
openapi-tags: off info-contact: error no-http: error path-kebab-case:
description: "Paths must be kebab-case"
given: "$.paths[]~"
severity: error then:
function: pattern functionOptions: { match: "^/(?:[a-z0-9]+(?--[a-z0-9]+)/?)+$" }
response-error-schema:
description: "Error responses must use standard schema"
given: "$.paths[][].responses[?(@property >= '400')]"
then:
field: "content.application/json.schema.$ref"
function: truthy id-as-uuid:
given: "$..parameters[?(@.name =~ /.id$/i)]"
then:
field: schema.format function: enumeration functionOptions: { values: ["uuid"] }

5. 2 Redocly (جزء. redocly. yaml ')

yaml apis:
main: openapi.yaml lint:
extends:
- recommended rules:
no-ambiguous-paths: error operation-2xx-only: off operation-success-response:
severity: error where:
subject: response filterInParentKeys: ["200","201","204"]
operation-security-defined: error no-plain-http: error

6) Protobuf/gRPC: ملف تعريف buf

6. 1 'بوف. يا "

yaml version: v2 modules:
- path: proto lint:
use:
- DEFAULT except:
- PACKAGE_VERSION_SUFFIX # используем v1 в package breaking:
use:
- WIRE_JSON deps: []
التوصيات:
  • لا تعيد استخدام أرقام الحقول ؛ محذوفة - في «محفوظة».
  • مجالات جديدة - «اختيارية» أو متخلفة عن السداد ؛ لا تغير الأنواع/الدلالات.

7) تغييرات دلالية و «كسر»

7. 1 HTTP

أمثلة كاسرة:
  • نوع حقل التغيير/إلزامي
  • تحذف الحالة/المسار/البارامتر
  • وتضييق النطاق/التضييق ؛
  • تغيير تنسيق المعرف (أويد → سلسلة).
عدم الكسر:
  • أضف مجالات اختيارية
  • حالات جديدة لا تؤثر على المسار السعيد (على سبيل المثال، موثق «422»)
  • تمديد enum.

7. 2 gRPC/Protobuf

حذف حقل بدون «محفوظ »/إعادة ترقيم - كسر.
تغيير النوع (int32 → سلسلة) - كسر.
عادة ما تكون إضافة علامة جديدة على أنها اختيارية آمنة.


8) ربط العقود والرموز

يتم توفير الاتساق من خلال خيطين:

1. عقد → الرمز: توليد SDK/server stubs، أمثلة سلبية في الاختبارات.

2. رمز → العقد: اختبارات المواصفات، التحقق التلقائي من الحالات/الرؤوس.

أفكار Semgrep:
  • عدم السماح بـ «return 200» عندما «خطأ! = لا شيء» ؛
  • إلزامية «Idempotency-Key» على طرق الدفع الكتابية ؛
  • إخفاء الرموز في جذوع الأشجار.

9) خط أنابيب CI/CD (مرجع)


pre-commit: spectral lint, redocly lint
PR gate:  openapi-diff (base..PR), buf breaking-check, graphql-inspector build:   schemathesis smoke, unit/integration linters (ESLint/golangci-lint)
release:  publish contracts (artifact/broker), sign & tag
تسقط العلاقات العامة إذا:
  • هناك انهيار ؛
  • تم انتهاك القواعد الأساسية (الأوضاع/الأمن/الأخطاء)
  • ولا توجد أمثلة/أوصاف للبارامترات.

10) كتالوج القواعد (نموذج لمؤسستك)

المحددات والأنواع

'_ id' - 'string', 'format: uuid'.
حقول المال - 'سلسلة '/' فاصلة عشرية' بمقياس ؛ العملة - ISO-4217.

أخطاء

مخطط موحد (انظر الفقرة 3). 3)، الرموز: «400/401/403/404/409/422/429/5xx».
' إعادة المحاولة بعد 429/503.

التثبيت

المؤشر فقط ؛ تم توثيق «max page _ size».

السلامة

جميع العمليات - كتلة «الأمن» ؛ تم وصف «النطاقات».
لا توجد روابط «http:» ؛ TLS 1. 2+.

ذاكرة التخزين المؤقت/الخصوصية

Для GET - 'ETag/آخر تعديل' ؛ للكتابة - «Idempotency-Key» (عند الاقتضاء).

الوثائق

«summary»، «description»، أمثلة على الطلبات/الردود (صالحة).


11) أمثلة على الشيكات الآلية

11. 1 التحقق من الترويسات الأمنية الإلزامية (الطيف)

yaml security-headers:
given: "$.paths[][].responses['200'].headers"
then:
function: truthy

11. 2 openapi-diff (خطوة CI زائفة)


openapi-diff --fail-on-incompatible base.yaml pr.yaml

11. 3 buf breaking-check


buf breaking --against '.git#branch=main'

12) إمكانية رصد نوعية العقود

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


13) أنتيباترن

يعيش "Doc' بشكل منفصل عن الكود → عدم التزامن. حافظ على العقد قريبًا من الخدمة وأصدر قطعة أثرية محفوظة.
بطانة فقط باليد. أحتاج إلى بوابة علاقات عامة صلبة.
أمثلة عشوائية (غير حتمية) - رقائق في الشيكات.
لا توجد أمثلة سلبية ورموز خطأ.
إعادة اختراع مخطط الخطأ لكل خدمة.
تجاهل فحوصات كسر Protobuf (تغيير العلامات «بالعين»).


14) تفاصيل iGaming/Finance

حقول العملات - جدول ثابت/تقريب ؛ حظر الطفو.
الرؤوس الإلزامية "X-Tenant' و" X-Region "وتتبع" traceparent ".
مقابض كتابة الدفع: التحقق من «Idempotency-Key» و «Retry-After» والدلالات الصحيحة 409/201.
شبكات الويب PSP/KYC: HMAC/mTLS موصوفة في «مخططات الأمان» ؛ مكافحة إعادة التشغيل («X-Timestamp»، النافذة).
القيود الإقليمية وتوطين الأخطاء («لغة المحتوى»).


15) قائمة التحقق من الاستعداد

  • تم تصميم الملفات الشخصية الطيفية/المتراجعة وتوصيلها في بوابة الالتزام المسبق وبوابة العلاقات العامة.
  • نمط وحالات خطأ واحد - تم الالتزام بها والتحقق منها.
  • openapi-diff/GraphQL مفتش/buf - تغييرات كسر الكتلة.
  • أمثلة على الطلبات/الردود صحيحة ؛ التوثيق/المرشحات.
  • تملأ المخططات والنطاقات الأمنية ؛ لا توجد روابط http.
  • بالنسبة لـ Protobuf: «محفوظة» على العلامات المحذوفة ؛ حقول جديدة - اختيارية.
  • تمكين وصلات Semgrep/code ؛ إخفاء الأسرار في جذوع الأشجار.
  • تنشر شركة CI القطع الأثرية للعقود وتقارير الوصلات.
  • دليل اللعبة: كيفية التصرف عند كسر ديفا (التراجع، hotfix، الإشعارات إلى المدمجين).

16) TL ؛ د

تنفيذ الربط التلقائي للعقود (Spectral/Redocly، buf/GraphQL Inspector) و diff الدلالي، وإصلاح خطأ واحد/الحالة/الوقوف/نظام الأمان، وربط بوابة العلاقات العامة ونشر العقود كقطع أثرية. أي كسر هو ضوء الفرامل. للمال/المدفوعات - قواعد خاصة (الخصوصية، 'Retry-After'، HMAC/mTLS).

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.