للمطوّرين

للمطوّرين

قراءة في 3 دقائقعرض بصيغة Markdown ↗

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

ما تبنيهنقطة البدايةالاعتماد
تطبيق أو جهاز يتصل بـURnetworkSDK، ثم جولة SDKرمز JWT للحساب، يُستبدل برمز يحمل clientId
عميل تطبيق يستخدم TCP أو UDP أو TLS/DTLS أو Direct Sockets عبر جهاز Deviceالمقابسجهاز Device مُهيّأ ومعه مسار اتصال متاح
أتمتة على شبكتك أنتAPI المشغّلرمز JWT لشبكتك أو مفتاح API من نوع urn_
منتج يسجّل الناس الدخول إليه، فيقبلونه في شبكتهمتسجيل الدخول باستخدام URnetworkمعرّف client_id من OAuth صادر لك

والحدّ الفاصل الذي يهمّ هو شبكةُ مَن التي تعمل عليها. فمع SDK وAPI المشغّل تعمل أنت على شبكتك أنت، باعتماد تملكه وتتحكم فيه. أما تسجيل الدخول باستخدام URnetwork فهو شخصٌ يقبل برنامجك في شبكته هو — فلا تملك ذلك الاعتماد أبداً، بل هو يمنحه، وهو يستطيع سحبه.

SDK

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

وتتشارك حزمة Go SDK وحزمة JS/WASM SDK وواجهة CGo ABI محركَ شبكات واحداً. وحزم اللغات لسطح المكتب تغلّف وحدة CGo؛ بينما يستخدم Android ملف AAR المبني بأداة gomobile، وتستخدم Swift حزمة XCFramework لمنصات Apple. وتتضمن JavaScript أمثلة لـNode وللمتصفح معاً، تستخدم جهاز Device مستضافاً.

ويشرح دليل المقابس كيف تستخدم اتصالات TCP وUDP وTLS/DTLS وDirect Sockets في فضاء المستخدم التي يوفّرها جهاز Device. وتستطيع التطبيقات استخدام هذه المقابس من دون تثبيت شبكة VPN على مستوى النظام. ويستخدم DeviceRemote في المتصفح مسارَ الحزم الخاص بجهاز Device المستضاف التابع له؛ فلا يتطلب واجهة TUN يملكها المتصفح.

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

API المشغّل

واجهة HTTP API التي تقف خلف URnetwork. فهي تتولى الإقلاع الأولي لبروتوكول connect، وتُصدر رموز JWT التي يصادق بها العملاء، وتكشف معاملات المطابقة (match-making) التي تقوم عليها الشبكة. وكل مسار ومخطط موجود في /docs/api، مولَّداً من المواصفة.

ونطاقها شبكتك أنت. فالاسم يدعو إلى فهمها على أنها تعمل على الشبكة عموماً؛ وهي لا تفعل ذلك.

وخطوة واحدة يتعثّر بها الجميع تقريباً: مسارات /auth تعيد رمز JWT بلا clientId، بينما يتطلب بروتوكول connect رمزاً يحمله. فاستخدم مسارات /network لاستبداله. والشبكة شبكة فرعية فريدة عالمياً (xyz.ur.network)؛ وclientId عنوانٌ من 16 بايت، يعادل عنوان IPv6 ويُعبَّر عنه بصيغة UDID.

تسجيل الدخول باستخدام URnetwork

يتيح للناس أن يقبلوا تطبيقك أو وكيلك البرمجي في شبكتهم الخاصة، فيستطيع التنسيق مع كل ما يشغّلونه هناك. وهذه الميزة قيد التطوير ولم تُطلق بعد — انظر الصفحة نفسها لمعرفة ما هو موجود اليوم.

وخادم MCP ليس فئة رابعة. بل هو خادم موارد واحد يمكن الوصول إليه برمز من تسجيل الدخول باستخدام URnetwork، ومثالٌ عملي على هذا النمط.

حدود الرموز

يُوقَّع نظاما الاعتمادات بمجموعتَي مفاتيح لا تتقاطعان. وهذا حدٌّ أمني لا مجرد عُرف: فرمز تسجيل الدخول باستخدام URnetwork ليس اعتماداً للمنصة، وتقديمه حيث يُتوقع رمز JWT للمنصة يُخفق بحكم البناء. ورموز الوصول في OAuth مقيّدة أيضاً بالجمهور (audience) — فكلٌّ منها يُتحقَّق منه لمورد واحد بالضبط ويُرفض في كل مكان آخر.

وهناك عبورٌ واحد مُجاز، وهو جسرٌ لا التفاف: فالتطبيق المقبول يستبدل رمز OAuth الخاص به برمز JWT للمنصة يحمل clientId، ونطاقه الشبكة التي قُبل فيها. والاستبدال قرار تفويض يُتخذ على الخادم؛ ولا يوجد رمز واحد يُتحقَّق منه في موضعين.

فإن كنت تحمل اعتمادين وأحدهما لا يعمل، فهذا في الغالب هو السبب.