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

    تصميم واجهات برمجة التطبيقات (API) المؤسسية؛ REST مقابل GraphQL مقابل gRPC، الإصدار والامتثال لـ KVKK

    سبعة قرارات عملية لتصميم API مؤسسي بدرجة إنتاج؛ اختيار البروتوكول (REST/GraphQL/gRPC)، عقد OpenAPI، استراتيجية الإصدار، تحديد المعدّل، سجلّ التدقيق، تدفّقُ البيانات الشخصية المتوافق مع KVKK. دروسٌ من مشاريع التكامل المؤسسي. ملاحظةٌ هندسية من eCloud Tech.

    نُشر: ٢٥ مايو ٢٠٢٦13 د قراءة
    تصميم-apirestgraphqlgrpc

    لم تَعد الـAPI مجرّد جسرٍ للبيانات بين التطبيقات؛ بل هي في معماريّة الشركات الحديثة العقدُ الحيّ للعمليات التجارية. بوّاباتُ العملاء، تطبيقاتُ الموبايل، تكاملاتُ B2B، شبكاتُ microservice، عملاءُ الذكاء الاصطناعي — كلٌّ يَتحدّث عبر الـAPI. وAPI سيّئةُ التصميم تُنتج مشروعَ ترحيلٍ خلال سنتين أو ثلاث؛ وAPI حسنةُ التصميم تَعيش 5-10 سنوات وتَتكيّف بسهولة مع حالات استخدامٍ جديدة. وتَتطلّب هندسةُ API المؤسسية قراراتٍ واعية في كل طبقة — من اختيار البروتوكول إلى انضباط الإصدار، ومن تحديد المعدّل إلى سجلّ التدقيق.

    في إطار خدماتنا هندسة تكامل واجهات البرمجة وهندسة منصّات SaaS أنجزنا خلال الثلاثين شهرًا الماضية 19 مشروعَ تصميم/ترحيل API مؤسسية في قطاعات المالية والتجارة الإلكترونية والصحة واللوجستيات. وتعمل API منصّتنا AIGENCY v4 العامة والداخلية بنفس الانضباط. في هذا المقال نَعرض بالترتيب سبعَ قراراتٍ حرجة لتصميم API المؤسسي؛ اختيار البروتوكول، تصميم العقد، الإصدار، تحديد المعدّل، المصادقة، سجلّ التدقيق + تدفّق KVKK، والمراقبة + Observability.

    1. اختيار البروتوكول؛ مصفوفةُ قرار REST وGraphQL وgRPC

    اختيارُ بروتوكول الـAPI هو قرارُ الهيكل العظمي — ترحيلُه صعب، يُحدّد المنظومة، يَصوغ مهاراتِ الفريق. ثلاثةُ خياراتٍ رئيسة (إضافةً إلى الـniches):

    REST (Representational State Transfer) — API ذو توجّهٍ مَورِدي على دلالات HTTP. أوسعُ منظومة. مزايا؛ cache (HTTP cache، CDN)، تشخيصٌ سهل (curl، Postman)، توثيقٌ بمعيار OpenAPI 3.x، أدواتٌ غنيّة (Insomnia، Swagger UI، Stoplight). عيوب؛ over-fetching (يُرسل الخادمُ حقولًا لا يستخدمها العميل)، under-fetching (N+1 طلبًا لشاشةٍ واحدة)، إصدارٌ معقّد.

    GraphQL — أصدرته Facebook في 2015، لغةُ استعلام schema-first. يَطلب العميلُ الحقولَ التي يحتاجها بدقّة، ويُعيد الخادمُ ذلك تمامًا. مزايا؛ تقليلُ البيانات (ميزةٌ لـ KVKK)، إنتاجيّةُ فِرَق العميل (عرضٌ جديد دون تغيير الـbackend)، استبطانٌ وأدوات (Apollo Studio، GraphiQL). عيوب؛ الـcache صعب (POST request، cache مستوى CDN لا يَعمل، يلزم Apollo Cache أو Persisted Queries)، مشكلةُ N+1 query (مع resolvers ساذجة)، مراقبةٌ معقّدة (لكل query شكلٌ مختلف)، تحديدُ المعدّل غير بديهي (depth limit وcomplexity limit طبقاتٌ منفصلة).

    gRPC — Google 2016، HTTP/2 + Protocol Buffers (Protobuf) للتسلسل الثنائي. مُحسَّنٌ لخدمةٍ إلى خدمة. مزايا؛ طاقةٌ عالية وزمن انتظارٍ منخفض (ثنائي، multiplexing)، streaming ثنائي الاتجاه أصيل، typing قوي (Protobuf IDL)، polyglot (توليدُ كود لـ 40+ لغة). عيوب؛ ليس أصيلًا في المتصفّح (يلزم gRPC-Web proxy)، تشخيصٌ صعب (ثنائي)، نادرٌ في الـAPI العامة (مطوّرو الطرف الثالث ليسوا معتادين عليه).

    مصفوفةُ القرار:

    السيناريوالموصى بهالسبب
    API REST عامة (مطوّرو طرف ثالث)REST + OpenAPIمنظومة، توثيق، OAuth، Postman
    تطبيقُ موبايل — backend (خطرُ over-fetch عالٍ)GraphQLالعميلُ يَسحب حقولَه، توفيرُ بيانات الموبايل
    Web SPA — backend (CRUD بسيط)RESTcache، تشخيص، منحنى تعلّمٍ منخفض
    Microservice ↔ microservice (حجمٌ عالٍ)gRPCأداء، typing، streaming
    المتصفّح → backend (ويب حديث)REST أو tRPCgRPC ليس أصيلًا
    عميلُ ذكاءٍ اصطناعي — منظومةُ أدواتREST + OpenAPIمنظومةُ LLM function calling مُهيَّأة لـ REST
    Bank core ↔ تكاملُ قنواتgRPC + mTLSداخلي، أداء + أمان
    تكاملُ B2B مؤسسيREST + OpenAPIمعيارٌ مشترك، توليدُ SDK

    النمطُ الهجين؛ بوّابةُ REST عامة + gRPC داخلي. يَرى العميلُ REST، وشبكةُ microservice في الـbackend تَتحدّث بـ gRPC. في منصّة AIGENCY لدينا واجهةٌ عامة بـ REST مع مصادقةٍ مَعتمدة على token (توثيق: aigency.dev/docs)؛ ويَدعم هذا الخيارَ كونُ منظومة LLM/Agent function calling مُهيَّأةً لـ REST.

    خطأٌ شائع؛ اختيارُ GraphQL لأنه trend. GraphQL هائلٌ في السيناريو المناسب، وتعقيدٌ غيرُ ضروري في السيناريو الخاطئ (CRUD بسيط + تطبيقٌ من صفحتين). والقرارُ يَتبع الملاءمة التقنية، لا الشهرة.

    2. تصميم العقد؛ OpenAPI 3.x، Contract-first مقابل Code-first

    عقدُ الـAPI هو المواصفةُ المهيكَلة التي تُعرّف URL لنقاط النهاية + HTTP method + شكلَ الطلب + شكلَ الاستجابة + status codes + متطلّبات المصادقة + صيغةَ الخطأ. وOpenAPI 3.x (المعروف سابقًا بـSwagger) هو معيارُ القطاع لـREST؛ وSDL (Schema Definition Language) إلزاميٌّ لـGraphQL؛ وملفّاتُ Protobuf .proto إلزاميةٌ لـgRPC.

    Contract-first:

    1. يَكتب المصمّمُ OpenAPI YAML/JSON (openapi.yaml).
    2. مراجعةُ أصحاب المصلحة — Frontend وMobile ومطوّر طرف ثالث.
    3. mock server (Prism وMockoon وStoplight) يُتيح للـFrontend العمل بلا Backend.
    4. يُكتَب تنفيذُ الـBackend بمواجهة العقد.
    5. اختباراتٌ مُولَّدة (Schemathesis وDredd) تَلتقط contract drift في CI.

    Code-first:

    1. يَكتب مطوّرُ الـBackend كودَ نقطة النهاية (Decorator + Type annotation).
    2. يَتولّد OpenAPI/SDL تلقائيًا من الإطار (FastAPI وNestJS وtRPC).
    3. يُولّد الـFrontend عميلًا حين يجهز الـBackend.

    أيُّهما الصواب؟ من تجربتنا:

    السيناريوالمنهجالسبب
    API عام/خارجيContract-firstمراجعةُ أصحاب المصلحة حرجة، العقد = commitment، انضباطُ التغيير الكاسر
    تكاملُ شريك B2BContract-firstالعقد = commitment قانوني، اتفاقٌ مسبقٌ مع الشريك
    Microservice داخلي (فريقٌ واحد)Code-firstتكرارٌ سريع، إطارٌ يُؤتمت
    PoC سريع / hackathonCode-firstكتابةُ العقد تُبطئ
    فريقٌ متعدّد اللغات (TS + Python + Go)Contract-firstمصدرُ حقيقةٍ واحد للـpolyglot
    فريقٌ بلغةٍ واحدة (TypeScript فقط)tRPC أو Code-firsttyping من البداية للنهاية، التوليدُ غيرُ ضروري

    كي يُستخدَم وثيقةُ OpenAPI فعلًا، انضباط:

    • openapi-validator في خطّ CI — رفضُ pushes بـYAML غيرُ صالح.
    • في كل PR يكون diff لـ openapi.yaml بندَ مراجعةٍ إلزامي (لإمساك التغييرات الكاسرة).
    • أداةُ openapi-diff تُقارن schema القديم والجديد وتَقترح تلقائيًا semantic version bump.
    • قواعدُ Spectral lint (أسماءُ الحقول camelCase، استجابةُ الخطأ إلزامية، security scheme معرَّف، إلخ).
    • SDKs مُولَّدة تلقائيًا (TypeScript وPython وGo) تُنشَر مع كل release إلى npm/PyPI/GitHub Releases.
    • توثيقٌ علني عبر Swagger UI أو Redoc — تحت subdomain مثل docs.your-api.com.

    إطارُ حوكمة الذكاء الاصطناعي لدينا يُفصّل المحتوياتِ الإلزامية لعقد الـAPI من منظور التدقيق وKVKK (security schemes، علاماتُ pii_field، headers data_retention).

    3. استراتيجيةُ الإصدار؛ URL وHeader وسياسةُ دورة الحياة

    الإصدار هو العاملُ الحرج الوحيد لاستدامة API عام. الاستراتيجيةُ الخاطئة إمّا تُغضب العملاء (تغييراتٌ كاسرة دائمة) أو تُتلف الـbackend (الإصدارُ القديم لا يَموت أبدًا، يَتورّم الكود).

    إصدارُ URL (/v1/users و/v2/users):

    • مزايا؛ يَسهل تشخيصُه، يَعمل مباشرةً في Postman/curl، متوافقٌ مع الـcache (URL = مفتاح)، العميلُ يُضمّن الـURL.
    • عيوب؛ نفسُ المورد في مكانَين، الترحيلُ يدوي.
    • توصيتُنا؛ الافتراضي للـAPIs REST العامة.

    إصدارُ Header (Accept: application/vnd.company.v2+json):

    • مزايا؛ URL نظيفة، مناسبٌ لمتشدّدي REST.
    • عيوب؛ تشخيصٌ صعب (header يدوي في curl)، يجب أن يَشمل مفتاحُ cache الـCDN الـheader (Vary header)، يَسهل خطأُ العميل.
    • توصيتُنا؛ فقط للـAPIs الداخلية أو niches بإصدارٍ متناظر جدًا.

    Query parameter (/users?version=2):

    • مناسبٌ للنماذج السريعة، وفي الإنتاج تُداخل مفتاحُ الـcache مع التحليلات.
    • لا نُوصي به.

    سياسةُ دورة حياة الإصدار (تُلزَم كتابيًا):

    المرحلةالمدةالإجراء
    Activeغير محدّدةميزاتٌ جديدة وإصلاحُ bugs وتغييراتٌ كاسرة → MINOR bump
    Deprecated12 شهرًاheaders Deprecation + Sunset، تحذيرٌ في التوثيق
    إعلانُ sunsetقبل 3 أشهربريدٌ إلكتروني + banner في الـdashboard لكل العملاء
    Sunsetفي التاريخالـendpoint يُعيد HTTP 410 Gone

    قواعدُ التغيير الكاسر (MUST):

    التغييرالنوعالإجراء
    إضافةُ حقلٍ جديد (response)غيرُ كاسرMINOR bump
    إضافةُ endpoint جديدغيرُ كاسرMINOR bump
    تغييرُ نوع حقلٍ موجودكاسرMAJOR bump، مسارُ إصدارٍ جديد
    إزالةُ حقلٍ موجودكاسرMAJOR bump
    إضافةُ حقلٍ مطلوب (request)كاسرMAJOR bump
    إضافةُ حقلٍ اختياري (request)غيرُ كاسرMINOR bump
    تغييرُ كود خطأكاسرMAJOR bump
    تغييرُ المصادقةكاسرMAJOR bump + إعلانٌ منفصل

    تَصدر إصداراتُ MAJOR كل سنتَين + فقط في حالاتٍ متطرّفة. API تَصدر إصدارَ MAJOR جديد كل شهر غيرُ موثوقة — لا يَبقى العميلُ معها.

    4. تحديدُ المعدّل والتقليص؛ استخدامٌ عادل + حمايةُ DDoS

    تحديدُ المعدّل يَحمي المواطنين الصالحين ويُوقف الفاسدين. استراتيجيةٌ من ثلاث طبقات:

    الطبقةُ 1 — عام / حمايةُ DDoS: على طبقة CDN/WAF (Cloudflare وAWS Shield وAkamai). عتبةٌ واسعة كـ10.000+ طلب/ثانية، مَعتمدةٌ على IP. الهدف؛ إيقافُ الهجمات الحجمية.

    الطبقةُ 2 — لكل API key (استخدامٌ عادل): بحسب فئة العميل:

    الفئةتحديدُ المعدّلBurstالحصّةُ الشهرية
    Free60 طلب/دقيقة10 طلب100K طلب
    Pro1.000 طلب/دقيقة50 طلب1M طلب
    Enterprise10.000+ طلب/دقيقة200 طلببلا حدّ (مع SLA)

    Sliding window أنعم من Fixed window. عدّادٌ مَعتمدٌ على Redis:

    INCR rate:user:{api_key}:{current_minute}
    EXPIRE rate:user:{api_key}:{current_minute} 60
    GET rate:user:{api_key}:{current_minute}
    

    خوارزميةُ Token bucket تُوفّر سعةَ burst (متوسطٌ 100 طلب/دقيقة لكن burst لحظي بـ50 طلب).

    الطبقةُ 3 — تحديدٌ لكل endpoint: حدودٌ منفصلة للنقاط المكلفة. مثال:

    الـEndpointالكلفةالحدّ
    GET /users/{id}منخفضة (قراءةُ DB)الحدُّ العام
    POST /pdf/generateعالية (تَوليد PDF 2 ث)10 طلب/دقيقة
    POST /ai/inferenceعاليةٌ جدًا (LLM)5 طلب/دقيقة
    POST /export/csvعالية (مسحُ DB)3 طلب/دقيقة

    استجابةُ HTTP إلزامية:

    • عند تجاوز الحدّ؛ 429 Too Many Requests
    • Headers:
      • X-RateLimit-Limit: 1000
      • X-RateLimit-Remaining: 0
      • X-RateLimit-Reset: 1716638400 (epoch)
      • Retry-After: 30 (ثانية)

    لوحةُ استخدامٍ للعميل إلزامية — يَرى المستخدمُ حصّتَه، تَحذيرٌ عند الاقتراب (بريدٌ إلكتروني / webhook)، تقريرٌ شهري.

    منظورُ KVKK؛ طبقةٌ إضافية لحماية brute-force على نقطة POST /login — backoff أُسّي لكل محاولةٍ فاشلة (ثانية، ثانيتان، 4 ث، 8 ث…)، قفلٌ لمدة 15 دقيقة بعد 10 محاولات. تكاملٌ مع CAPTCHA وتحدّي MFA.

    5. المصادقة والتفويض؛ OAuth 2.1 وJWT وmTLS

    المصادقة = مَن أنت؟؛ التفويضُ = ماذا يحقُّ لك؟. أربعةُ أنماطٍ رئيسة في الـAPIs المؤسسية:

    API key (بسيط):

    • header X-API-Key: ak_live_xxxxx.
    • خادمٌ إلى خادم، ليس قصيرَ العمر، دعمُ scope ضعيف.
    • شائعٌ جدًا في الـAPIs العامة (Stripe وOpenAI)، وقد يكفي داخليًا.
    • انضباطُ التدوير حرج — عند التسريب revoke فوريّ ومفتاحٌ جديد.

    OAuth 2.1 + JWT (المعيارُ الحديث):

    • خادمُ تفويض (Keycloak وAuth0 وOkta وCognito وAuthentik) مع الـflows.
    • Authorisation Code Flow + PKCE (Mobile وSPA)، Client Credentials (خادم إلى خادم).
    • Access token (قصيرُ العمر، 15 دقيقة – ساعة) + Refresh token (طويلُ العمر، 7-30 يومًا).
    • يَحتوي JWT على sub وscope وexp وclaims مخصّصة. لا تَستخدم HS256 المتناظر، بل RS256/ES256 اللاتناظري (تَسهل تدويرُ المفاتيح).
    • الخيارُ السائد للـAPIs العامة وB2B المؤسسية.

    mTLS (mutual TLS):

    • يُقدّم الطرفان (العميل + الخادم) شهادات.
    • للـBank core ↔ القناة، تكامل أنظمة الصحة، البنية التحتية الحرجة.
    • mTLS + OAuth معًا (دفاعٌ في العمق) في البيئات عالية الأمن.

    RBAC + ABAC + Scope:

    النموذجالتعريفالمثال
    RBAC (Role-Based)مستخدم → دور → صلاحية"admin"، "editor"، "viewer"
    ABAC (Attribute-Based)فحصُ سمات (قسم، منطقة، وقت)"قسمُ التسويق + مكتبُ إسطنبول + 09-18"
    Scope (OAuth)scope صلاحيةٍ على الـtokenusers:read وorders:write
    ReBAC (Relationship-Based)رسمُ علاقات"مؤلّفُ هذا المستند يَقدر يُعدّل"

    توصيةٌ عملية؛ scopes في JWT (خشنة) + RBAC على مستوى قاعدة البيانات (دقيقة). scopes عريضة كـread:users وwrite:users في الـJWT؛ وعلى مستوى قاعدة البيانات تفاصيلٌ كـ"هذا user_id يَرى صفوفَ مؤسستِه فقط".

    تخزينُ الـtoken — localStorage في المتصفّح معرَّضٌ لـXSS؛ يُفضَّل cookies httpOnly Secure. للموبايل؛ Keychain (iOS) / Keystore (Android).

    KVKK عمليًا؛ كلُّ endpoint API يَمسّ بياناتٍ شخصية يجب أن يَتطلّب scope — عميلٌ بلا scope read:user_profile لا يَصل إلى البيانات الشخصية، ويُرفَض الطلب (403 Forbidden).

    6. سجلُّ التدقيق + تدفّقُ البيانات الشخصية المتوافق مع KVKK

    الخطوةُ الأكثر تجاهلًا في الـAPI الإنتاجي هي سجلُّ التدقيق. وفي تحقيقات خرق KVKK وتدقيقات BDDK وامتثال SOC 2 يكون هو الدفاعَ الوحيد — توثيقُ مَن لمس أيَّ PII ومتى.

    الحقولُ الأدنى لسجل التدقيق:

    الحقلالمثالالسبب
    timestamp2026-05-25T14:32:17Zالترتيبُ الزمني
    request_iduuid v4تتبّعٌ موزَّع
    api_key_idak_live_xxxxxمَن (تقنيًا)
    user_idu_98234مَن (تجاريًا)
    client_ip203.0.113.42من أين
    user_agentMozilla/5.0…أيُّ أداة
    http_methodGETنوعُ الإجراء
    endpoint/v2/users/{id}المورد
    query_params?fields=name,emailالتفصيل
    response_status200النتيجة
    response_time_ms142الأداء
    pii_fields_accessed[name, email, phone]حرجٌ لـKVKK
    auth_scoperead:usersالصلاحية

    تخزينُ السجلّ: غيرُ قابلٍ للتعديل، append-only — Elasticsearch + ILM (Index Lifecycle Management): 90 يومًا hot + سنتان warm + 5 سنوات cold (لامتثال احتفاظ KVKK). السحاب؛ AWS CloudWatch Logs + S3 Glacier، Azure Log Analytics + Blob archive. الوصولُ مقصورٌ على فريق الامتثال (RBAC + MFA).

    نمطُ الإخفاء على مستوى الحقل (على طبقة API gateway):

    الاستجابةُ الأصلية:
    {
      "user_id": "u_98234",
      "name": "Mehmet Yılmaz",
      "tc_kimlik": "12345678901",
      "iban": "TR33 0006 1005 1978 6457 8413 26",
      "phone": "+90 532 123 45 67"
    }
    
    دورُ خدمة العملاء:
    {
      "user_id": "u_98234",
      "name": "Mehmet Yılmaz",
      "tc_kimlik": "***********",
      "iban": "TR33 **** **** **** **** **** 26",
      "phone": "+90 532 *** ** **"
    }
    
    دورُ المالية:
    {
      "user_id": "u_98234",
      "name": "Mehmet Yılmaz",
      "tc_kimlik": "12345678901",
      "iban": "TR33 0006 1005 1978 6457 8413 26",
      "phone": "+90 532 *** ** **"
    }
    

    Sparse fieldset (?fields=… في REST، أصيلٌ في GraphQL) — يَسحب العميلُ الحقولَ التي يحتاج فقط، فلا تَعبر PII غيرُ ضرورية. التعبيرُ التقني عن مبدأ تقليل البيانات في KVKK.

    الحقُّ في المحو (المادة 11 من KVKK) — عند وصول طلب محو:

    1. التحقّقُ من الهوية (هل الشخصُ هو فعلًا هذا المستخدم؟).
    2. endpoint الـAPI؛ DELETE /users/{id} أو أداةُ admin داخلية.
    3. حذفٌ صلب (لا soft delete — ليس مجرّد عمود deleted_at، حذفٌ فعلي).
    4. حذفٌ متتالٍ (الطلباتُ المرتبطة، الجلسات، حقولُ PII في سجلّات التدقيق).
    5. ملاحظةٌ في سجلّ التدقيق عن حدث الحذف (مَن حذف ومتى — لا هويّةُ المحذوف، فقط الحدث).
    6. يجب أن يَكتمل خلال 30 يومًا.

    النقلُ العابر للحدود: يُسجَّل بلدُ عميل الـAPI؛ ولنقل PII خارج الاتحاد الأوروبي تُضاف Standard Contractual Clauses إلى العقد + ترجمةٌ تركية.

    7. المراقبةُ + Observability؛ ليس فقط يَعمل، بل صحيح

    API إنتاجي يجب أن يكون أكثر من يَعمل؛ يجب أن يكون صحيًا. وهذا يَتطلّب ثلاثَ طبقاتٍ من الـobservability:

    Metrics (مؤشّراتٌ عددية):

    المؤشّرالهدفالمعنى
    Request rateمتابعةُ الاتجاهاتالحجم
    Error rate (4xx + 5xx)<1% 5xx، <5% 4xxالصحة
    Latency p50<100 مللي ثانيةالمسارُ السريع
    Latency p95<500 مللي ثانيةمعظمُ المستخدمين
    Latency p99<2 ثالحالةُ الأسوأ
    Throughput (طلب/ثانية)تخطيطُ السعةإشارةُ التوسّع
    Active API keysتَبنّي العملاءمؤشّرٌ تجاري
    Rate limit hit rate<2%هل الفئةُ مَوزونة جيّدًا؟

    Prometheus + Grafana (مفتوحُ المصدر)، Datadog/New Relic (مُدارة)، AWS CloudWatch/Azure Monitor (cloud-native).

    Tracing (موزَّع): إذا مرّ طلبٌ بخمس microservices فاتّبعه من البداية للنهاية عبر trace ID. OpenTelemetry معيار؛ Jaeger/Tempo/AWS X-Ray كـbackend. حرجٌ لاكتشاف عُنق الزجاجة في الـlatency (أيُّ خدمةٍ بطيئة؟).

    Logging (مُهيكَل): صيغةُ JSON، مستوى log (DEBUG، INFO، WARN، ERROR)، سياق (request_id، user_id، trace_id). Elasticsearch + Kibana، Loki + Grafana، Splunk. سجلُّ التدقيق على pipeline منفصل (غيرُ قابلٍ للتعديل، امتثال).

    SLO + Error Budget:

    • SLO؛ 99.9% توفّر (43 دقيقة/شهر downtime مقبولة).
    • 99.95% (22 دقيقة/شهر) — فئةُ المالية/الصحة.
    • 99.99% (4 دقيقة/شهر) — فئةُ البنية التحتية الحرجة (يَتطلّب multi-region active-active).
    • استنفادُ Error budget → تجميدُ ميزات، التركيزُ على عملِ الموثوقية.

    Alerting (PagerDuty وOpsgenie وGrafana OnCall):

    • P1؛ 5xx rate >5% (5 دقائق مستمرّة) → SMS + هاتف للـon-call.
    • P2؛ latency p99 >5 ث (10 دقائق مستمرّة) → SMS للـon-call.
    • P3؛ rate limit hit rate >10% مستمرّ → بريدٌ إلكتروني.
    • P4؛ ملخّصٌ يومي → قناةُ Slack.

    Status page (Statuspage.io وInstatus وself-hosted): شفافيةٌ مع المستخدم. حادث → تحديثٌ علني → حلّ.

    البنيةُ التحتية لهندسة البيانات كثيرًا ما تكون حرجة لـpipeline metric + log الـAPI — Kafka وETL وtime-series database.

    ملخّصٌ عملي؛ قائمةُ بداية

    الترتيبُ الصحيح لأوّل API إنتاجي:

    1. اختيارُ البروتوكول؛ العام = REST، الموبايلُ ثقيل = GraphQL، شبكةُ microservice داخلية = gRPC. الهجين OK.
    2. تصميمُ العقد؛ Contract-first (عام/B2B)، Code-first (فريقٌ داخلي منفرد). تحقّقٌ من OpenAPI 3.x في CI.
    3. الإصدار؛ إصدارُ URL افتراضًا، 12 شهرَ deprecated، انضباطُ semantic version.
    4. المصادقة؛ OAuth 2.1 + JWT (RS256)، تفويضٌ مَعتمد على scope، mTLS للحساسية العالية.
    5. تحديدُ المعدّل؛ 3 طبقات (DDoS + لكل key + لكل endpoint)، Sliding window + Redis، headers الاستجابة إلزامية.
    6. سجلُّ التدقيق؛ timestamp + هوية + endpoint + حقولُ PII المقروءة. تخزينٌ غيرُ قابل للتعديل، احتفاظٌ 5+ سنوات.
    7. KVKK؛ scope + إخفاء + sparse fieldset + pipeline حذفٍ صلب. سجلّاتُ النقل العابر للحدود.
    8. توثيقُ OpenAPI؛ Contract-first، SDKs مُولَّدة تلقائيًا، Swagger UI علني.
    9. المراقبة؛ ثلاثُ طبقات (metrics + traces + logs)، SLO + Error budget، Alerting + Status page.
    10. تحسينٌ مستمر؛ ملاحظاتُ العميل، تحليلاتُ الخطأ، خارطةُ deprecation، مراجعةُ أمنٍ سنوية (pentest).

    هذه القائمةُ هي الحدُّ الأدنى للانضباط. ثم تُضاف فوقها إضافاتٌ قطاعية (PSD2 OAuth flow، FHIR/HL7 للصحة، ISO 27001 مصفوفةُ تحكّمٍ بالوصول). وقيمةُ API المؤسسي ليست في عمله اليوم، بل في بقائه قابلًا للاستدامة والتوثيق والتدقيق بعد ثلاث سنوات.

    أنجز فريقُنا في شانلي أورفا قرة كوبرو 19 مشروعَ API مؤسسي في قطاعات المالية والتجارة الإلكترونية والصحة واللوجستيات عبر هندسة تكامل واجهات البرمجة وهندسة منصّات SaaS، ويُشغّل معماريّةَ API منصّتنا AIGENCY v4 بنفس الانضباط. ولأجل تصميم API مؤسسي، أو ترحيل، أو تقييم نضج API قائم لديكم، يمكنكم التواصل عبر نموذج الاتصال؛ والمكالمةُ الأولى للتقييم مجانية.


    eCloud Tech — فريقٌ مقرّه شانلي أورفا في تركيا، يعمل في البرمجيات المؤسسية والذكاء الاصطناعي والبلوكتشين والأمن السيبراني. Building Tomorrow.

    الأسئلة الشائعة

    يستند القرار إلى ثلاثة متغيّرات. (1) نوع العميل؛ إن كانت احتياجات بيانات الويب والموبايل مختلفة فـGraphQL (كل عميل يَسحب حقولَه فقط، بلا over-fetching)؛ وإن كفى عقدٌ واحد للجميع فـREST (منظوماتٌ ناضجة للـcache والتشخيص والتوثيق). أمّا للتواصل بين الخدمات داخليًا بزمن انتظارٍ منخفض وطاقةٍ عالية فـgRPC (HTTP/2 وProtobuf وstreaming أصيل). (2) منظومةُ المطوّرين؛ يَعرف كلُّ فريقٍ REST ولا يتطلّب تدريبًا. وGraphQL يَتطلّب منحنى تعلّمٍ من أسبوعين إلى أربعة مع Apollo/Relay، ويُفيد منه كبار المهندسين. وgRPC يَتطلّب من الفريق تَبنّي انضباط Protobuf + IDL — ملاءمةٌ طبيعية للفِرق الثقيلة في الـbackend. (3) الخارجي مقابل الداخلي؛ ينبغي للـAPIs المعروضة للزبائن الخارجيين أن تكون غالبًا REST + OpenAPI (دعمُ الأدوات الخارجية، Postman، منظومة OAuth)؛ ولشبكات الخدمات الدقيقة الداخلية يَسود gRPC. والنمطُ الهجين شائعٌ كذلك؛ REST عام + gRPC داخلي (بوّابةُ REST تَعمل proxy إلى الـbackend بـgRPC). لا تَنخدع بأسطورة GraphQL مفيدٌ لكل شيء؛ فللـCRUD البسيط يَبقى REST الخيارَ الصحيح.

    مقالات ذات صلة