توجيه الويب هو أسلوب لتعيين طلبات HTTP لوظائف المعالج التي تعمل على مسار URL المحدد. غالبًا ما يستخدم التوجيه لإنشاء تطبيقات من صفحة واحدة (SPA) وواجهات برمجة التطبيقات. في جهاز التوجيه ، يحدد الرمز تسلسل الإجراءات المصاحبة لطلب المستخدم.

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

الشروع في العمل مع التوجيه في Go

النظام البيئي لـ Go هو موطن لحزم التوجيه التي تجرد العناصر غير الضرورية وتجعل من السهل إنشاء تطبيقات وخدمات الويب.

تقوم العديد من أطر عمل Go على الويب بتنفيذ بعض حزم التوجيه هذه.

إليك نموذج هيكلي بسيط لـ جسون ستعود إلى العميل في هذا البرنامج التعليمي.

يكتب معلومات هيكل {
رسالة سلسلة`json:" message "`
وصف سلسلة`json:" الوصف "`
}

لا تزال معظم أجهزة توجيه Go تستخدم net / http ResponseWriter و طلب الطرق كمعلمات في وظائف المعالج.

funcأهلا(الكاتب http. ResponseWriter ، طلب * http. طلب) {
// منطق عمل وظيفة المعالج هنا
}
instagram viewer

أيضًا ، ستحتاج إلى بدء خادم بامتداد استمع وخدم طريقة بدء تشغيل الخادم في معظم الحزم.

يخطئ: = http. ListenAndServe (":8000"، جهاز التوجيه)

إذا يخطئ! لا شيء {
إرجاع
}

فيما يلي بعض حزم التوجيه الشائعة في نظام Go.

1. موجه Gorilla Mux

تنفذ حزمة Gorilla Mux كلاً من موجه الطلب ومرسل الطلبات لطلبات HTTP. إنه مثل http. سيرف طريقة ولكن مع وظائف إضافية.

يقوم موجه Gorilla Mux بتنفيذ ملف http. معالج واجهة وأساليبها متوافقة مع سيرف طريقة. تنفذ الحزمة أيضًا أنظمة URL متعددة ويمكنك استخدام أجهزة التوجيه كموجهات فرعية (مسارات متداخلة) لتحديد مسارات مماثلة.

ال غوريلا مكس الحزمة هي جزء من مجموعة أدوات الويب Gorilla. تتضمن مجموعة الأدوات حزمًا متعلقة بالويب لحل العديد من المشكلات من إبقاء المستخدمين مسجلين الدخول من خلال الجلسات لتخزين البيانات باستخدام ملفات تعريف الارتباط.

قم بتشغيل هذا الأمر في محطة العمل الخاصة بك لتثبيت حزمة Gorilla Mux.

يذهب الحصول على -u github.com/gorilla/mux

إليك كيفية إعداد ملف احصل على طلب توجيه إلى وظيفة معالج تقوم بترميز استجابة JSON مع حزمة Gorilla Mux.

يستورد (
"ترميز / json"
"github.com/gorilla/mux"
"سجل"
"net / http"
)

funcأهلا(الكاتب http. ResponseWriter ، طلب * http. طلب) {
الرد: = معلومات {
الرسالة: "نجاح" ،
الوصف: "لقد كتبت إلى العميل بنجاح" ،
}

يخطئ: = json. NewEncoder (كاتب) .Encode (استجابة)

إذا يخطئ! لا شيء {
سجل. فاتالن (يخطئ)
}
}

funcرئيسي() {
جهاز التوجيه: = مسك. جهاز التوجيه الجديد ()
جهاز التوجيه. HandleFunc ("/ hello"، hello). طرق ("GET")
يخطئ: = http. ListenAndServe (":8000"، جهاز التوجيه)

إذا يخطئ! لا شيء {
إرجاع
}
}

ال أهلا المعالج ترميز الهيكل إلى JSON باستخدام تشفير طريقة NewEncoder هيكل.

ال رئيسي تقوم الوظيفة بتعيين مثيل موجه Gorilla Mux جديد إلى جهاز التوجيه عامل. ثم يستدعي مقبض طريقة لتعيين المسار إلى وظيفة المعالج. يمكنك استخدام ال طُرق طريقة لتحديد نوع الطلب.

2. جهاز التوجيه تشي

ال جهاز التوجيه تشي هو جهاز توجيه خفيف الوزن وسريع وقابل للإنشاء لبناء خدمات ويب قائمة على HTTP في Go. جهاز التوجيه Chi متوافق مع http الحزمة ، ولا توجد تبعيات خارجية لجهاز التوجيه.

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

قم بتثبيت جهاز التوجيه Chi على وحدات Go الخاصة بك باستخدام هذا الأمر.

يذهب احصل على github.com/يذهب-شي / تشي

التوجيه باستخدام جهاز التوجيه Gorilla Mux وجهاز التوجيه Chi متشابه للغاية. إليك كيفية إعداد ملف احصل على طلب ترميز البنية إلى JSON كرد.

يستورد (
"ترميز / json"
"github.com/يذهب-شي / تشي / v5 "
"سجل"
"net / http"
)

funcرئيسي() {
جهاز التوجيه: = تشي. جهاز التوجيه الجديد ()
جهاز التوجيه. الحصول على ("/ hello" ، مرحبًا)
يخطئ: = http. ListenAndServe (":8000"، جهاز التوجيه)

إذا يخطئ! لا شيء {
إرجاع
}
}

funcأهلا(الكاتب http. ResponseWriter ، طلب * http. طلب) {
الرد: = معلومات {
الرسالة: "نجاح" ،
الوصف: "لقد كتبت إلى العميل بنجاح" ،
}

يخطئ: = json. NewEncoder (كاتب) .Encode (استجابة)

إذا يخطئ! لا شيء {
سجل. فاتالن (يخطئ)
}
}

ال أهلا دالة المعالج هي وظيفة المعالج لـ احصل على طلب.

في ال رئيسي وظيفة جهاز التوجيه المتغير هو مثيل لجهاز التوجيه Chi. يمكنك تحديد طريقة طلب باسم الطريقة ؛ في هذه الحالة، احصل على تأخذ في المسار ومعرف وظيفة المعالج كمعلمات.

3. حزمة HttpRouter

ال HttpRouter الحزمة عبارة عن معدد طلب عالي الأداء وخفيف الوزن. يوفر وظائف أكثر من سيرف تنفيذ حزمة http.

تحتوي حزمة HttpRouter على بصمة ذاكرة صغيرة وأداء عالٍ وقابلية تطوير جيدة. إنه واحد من أقدم أجهزة التوجيه وأكثرها استخدامًا في نظام Go البيئي ، ويتم تنفيذه في العديد من الأجهزة أطر Go الشعبية، بما فيها مكتبة الجن.

سيؤدي تشغيل هذا الأمر على المحطة الطرفية لدليل العمل الخاص بك إلى تثبيت حزمة HttpRouter.

يذهب احصل على github.com/julienschmidt/httprouter

يختلف التوجيه باستخدام HttpRouter قليلاً عن أجهزة توجيه Chi و Gorilla Mux.

إليك كيفية إعداد طلب GET بسيط باستخدام حزمة HttpRouter.

يستورد (
"ترميز / json"
"github.com/julienschmidt/httprouter"
"سجل"
"net / http"
)

funcرئيسي() {
جهاز التوجيه: = httprouter. جديد()
جهاز التوجيه. GET ("/ hello" ، مرحبًا)
يخطئ: = http. ListenAndServe (":8000"، جهاز التوجيه)

إذا يخطئ! لا شيء {
إرجاع
}
}

funcأهلا(الكاتب http. ResponseWriter ، طلب * http. طلب _ httprouter. بارامز) {
الرد: = معلومات {
الرسالة: "نجاح" ،
الوصف: "لقد نجحت في الوصول إلى نقطة نهاية API" ،
}

يخطئ: = json. NewEncoder (كاتب) .Encode (استجابة)

إذا يخطئ! لا شيء {
سجل. فاتالن (يخطئ)
}
}

يجب أن تحتوي وظائف المعالج الخاصة بحزمة HttpRouter على الامتداد بارامز طريقة موجه HTTP.

ال جهاز التوجيه المتغير هو مثيل لـ HttpRouter. يمكنك إعداد طلب GET باستخدام احصل على الطريقة التي تأخذ في المسار ومعرف وظيفة المعالج.

4. راوتر بات

تربيتة هو مُضاعِف طلب HTTP على غرار سيناترا ويعمل مع حزمة Go’s net / http. لا يحتوي جهاز التوجيه بات على أي وظائف بخلاف التوجيه.

قم بتشغيل هذا الأمر في دليل العمل الخاص بك لتثبيت Pat Router

يذهب احصل على github.com/bmizerany/pat

ينفذ جهاز التوجيه بات وظائف مماثلة لـ سيرف طريقة.

إليك كيفية التعامل مع توجيه الطلب باستخدام تربيتة حزمة.

يستورد (
"ترميز / json"
"github.com/bmizerany/pat"
"سجل"
"net / http"
)

funcأهلا(الكاتب http. ResponseWriter ، طلب * http. طلب) {
الرد: = معلومات {
الرسالة: "نجاح" ،
الوصف: "لقد وصلت بنجاح إلى نقطة النهاية" ،
}

يخطئ: = json. NewEncoder (كاتب) .Encode (استجابة)

إذا يخطئ! لا شيء {
سجل. فاتالن ("يخطئ")
}
}

funcرئيسي() {
جهاز التوجيه: = بات. جديد() // مثيل جهاز التوجيه
جهاز التوجيه. احصل على ("/ hello"، http. HandlerFunc (مرحبًا))
http. معالجة ("/" ، جهاز التوجيه)
يخطئ: = http. ListenAndServe (":12345", لا شيء)

إذا يخطئ! لا شيء {
سجل. فادح ("ListenAndServe:"، يخطئ)
}
}

ال جديد تقوم الطريقة بإرجاع مثيل جهاز التوجيه. سيتعين عليك التفاف وظيفة المعالج بامتداد المعالج طريقة. يمكنك بعد ذلك استخدام ملف يتعامل طريقة لتحديد مسار جذر وتركيب مثيل جهاز التوجيه قبل بدء تشغيل الخادم.

بناء جهاز التوجيه ليس بهذه الصعوبة

تقوم جميع أجهزة التوجيه في هذه المقالة بتطبيق وظائف من حزم net و http. يمكنك التحقق من وثائق طريقة ServeMux لمعرفة كيفية نسخ جهاز توجيه بوظائف إضافية لتناسب احتياجاتك.

تتضمن الأطر مثل Gin و Fiber وظائف التوجيه من الحزمة الصافية أو الحزم الخارجية التي تنفذها.