تطبيق الويب
لاستخدام معالج مخصص، يتعين عليك تأليف تطبيق ويب. بعد كتابة تطبيقك وتجميعه، يتعين عليك تكوين مضيف Azure Functions حتى يعرف كيفية استخدامه. سنستعرض المزيد عن ذلك لاحقاً. أولاً، كيف يمكنك إنشاء تطبيق ويب في Go؟
إنشاء واجهة برمجة تطبيقات REST في Go
لإنشاء واجهة برمجة تطبيقات REST باستخدام Go، تحتاج إلى معرفة بعض الأشياء:
استيراد المكتبات. ستستخدم المكتبات و
fmt
وlog
وnet/http
. ستساعدك هذه المكتبات في إدارة المسارات ومعالجة الطلبات الواردة والتعامل مع التسجيل. استخدم عبارة الاستيراد التالية:import ( "fmt", "log", "net/http" )
إعداد التوجيه. تتكون واجهات برمجة تطبيقات REST من أقسام منطقية تسمى المسارات. المسارات هي عناوين تستجيب لاهتمام محدد في التطبيق. لإعداد مسار، استدعِ أسلوب
HandleFunc()
في مثيلhttp
وحدد المسار للاستجابة للطلبات:http.HandleFunc("/", handleRoute)
في هذه الحالة، يتعين عليك إنشاء وظيفة
handleRoute
لمطابقة الطلبات الواردة بالمسار"/"
.إدارة الطلبات. يتعين عليك إدارة الطلبات الواردة وقراءة أشياء، مثل معلمات الموجه أو الاستعلام أو نص أساسي منشور. ثم يتعين عليك إنشاء استجابة. يمكن أن تبدو الوظيفة التي تعالج الطلب كما يلي:
func handleRequest(w: http:ResponseWriter, r: http.Request) { fmt.Fprintf(w, "My first REST API") }
ترسل التعليمة البرمجية النص "My first REST API" مرة أخرى إلى عميل استدعاء. يأخذ أسلوب
Fprintf()
وسيطتين: دفق بيانات الاستجابة والسلسلة المطلوب إرسالها مرة أخرى.إنشاء الخادم. لكي تتمكن من الإنصات للطلبات، يتعين عليك بدء تشغيل الخادم. يتعين عليك أيضاً تحديد جزء يمكن إرسال الطلبات إليه. توضح التعليمة البرمجية التالية كيفية إنشاء الخادم:
http.ListenAndServe(":3000", nil)
الخادم يعمل الآن ويمكنه الإنصات للطلبات في المنفذ 3000.
إنشاء تطبيق Azure Functions
قبل تطوير تطبيق Azure Functions، نوصي بما يلي:
تثبيت تعليمة Visual Studio البرمجية. يمكنك تأليف تطبيقات Azure Functions بأي محرر نص أو بيئة تطوير متكامل (IDE). تعرض هذه الوحدة بعض الملحقات التي تسهِّل عملية التأليف.
تثبيت ملحق تعليمة Visual Studio البرمجية لتطبيق Azure Functions. سيساعدك هذا الملحق على دعم تطبيق Functions وتشغيله وتصحيحه.
تثبيت Azure Functions Core Tools. يتضمن هذا التثبيت أمر
func
قابلاً للتنفيذ يتيح لك تشغيل تطبيق Functions، وغير ذلك من الأمور الأخرى.
دعم تطبيق Functions باستخدام تعليمة Visual Studio البرمجية
بعد أن تكون لديك جميع التبعيات المطلوبة المثبتة على نظامك، تكون الخطوة التالية هي دعم التطبيق. عند سؤالك عن وقت التشغيل، اختر Custom Handler.
تضمن الآن أن الملفات الصحيحة سيتم إنشاؤها. عند إنشاء مشروع بهذه الطريقة، يتعين عليك تحديد نوع مشغِّل للوظيفة الأولى. تعمل المعالجات المخصصة مع جميع المشغِّلات وعمليات ربط البيانات المعتادة.
بعد الانتهاء من إنشاء المشروع، يجب أن يكون لديك تطبيق مع الملفات التالية:
- host.json
- local.setting.json
- proxies.json
- function.json
يوجد ملف function.json في دليل يتطابق اسمه مع اسم الوظيفة الأولى. ستستخدم هذا الملف لتكوين الوظيفة.
تكوين المشروع
لكي يعمل تطبيقك مع إعدادات HTTP الأولية، يجب عليك تكوين بعض الأشياء:
الإنصات لمنفذ معالج مخصص. يتعين على تطبيقك الإنصات لمنفذ معين. يحتوي المتغير
FUNCTIONS_CUSTOMHANDLER_PORT
على القيمة التي تحتاج إليها. يمكنك البحث عن قيمة المنفذ باستخدام التعليمة البرمجية التالية:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
تكوين المسار الافتراضي القابل للتنفيذ. نظراً لأنك تنشئ ملفاً قابلاً للتنفيذ، يتعين عليك إخبار مشروع تطبيق Functions بمكان وجوده.
حدد موقع ملف function.json في جذر المشروع. في مقطع
customHandler
، حددdefaultExecutablePath
. فيما يلي مثال على ما يمكن أن يبدو عليه:"customHandler": { "defaultExecutablePath": "mygoapp.exe" }
تمكين إعادة توجيه الطلبات. عندما تتعامل مع وظيفة تستخدم مشغِّل HTTP، تحتاج إلى تكوين التطبيق بشكل مختلف قليلاً عما إن كنت تتعامل مع نوع آخر من المشغِّلات (مثل مشغِّل قائمة الانتظار).
مكِّن خاصية تسمى
enableForwardingHttpRequest
. عند تمكين هذه الخاصية، تغيِّر سلوك كيفية معالجة الطلب بالطرق التالية:نسخة من الطلب الأصلي. لا يحتوي طلب HTTP على حمولة طلب المعالج المخصص. بدلاً من ذلك، يستدعي مضيف Functions المعالج بنسخة من طلب HTTP الأصلي.
نفس مسار الطلب الأصلي. يستدعي مضيف Functions المعالج بنفس مسار الطلب الأصلي.
عند تحديد مسار ومعالج مسارات، يجب أن تكون محدداً في كيفية إعداد التوجيه. لنفترض أن لديك المخطط التفصيلي التالي للمشروع:
hello/ function.json
سيتم تعيين الملفات الموجودة في المخطط التفصيلي إلى مسار
/api/hello
بشكل افتراضي. في التعليمة البرمجية لإعداد المسار، يتعين عليك تحديد المسار بالكامل:mux.HandleFunc("/api/hello", helloHandler)
إذا لم تكن قد مكَّنت هذا الإعداد، لكان تحديد التعليمة البرمجية للموجِّه على أنها
"/hello"
كافياً، بالنسبة لأنواع المشغِّلات وعمليات ربط البيانات الأخرى.نسخة من استجابة المعالج. يُرجِع مضيف Functions نسخة من استجابة HTTP للمعالج كاستجابة للطلب الأصلي.
في المثال السابق، الملف القابل للتنفيذ هو mygoapp.exe
. يفترض المثال أنك تنشئ الملف القابل للتنفيذ من ملف يسمى mygoapp.go
، لكن يمكنك تسمية ملف Go بأي اسم تريده. على Linux أو macOS، لا يكون للملف القابل للتنفيذ أي امتداد.
إنشاء التطبيق
لا يختلف إنشاء تطبيق الويب في هذه المرحلة اختلافاً كثيراً عن بناء أي تطبيق ويب باستخدام Go. ما دمت قد أجريت التكوين الموضح في القسم السابق، تكون قد انتهيت من كل شيء.
الآن يتعين عليك اتخاذ الخطوات التالية:
- اقرأ المنفذ.
- أنشئ مثيلاً لخادم HTTP.
- حدد المسارات ومعالجات المسارات.
- ابدأ الإنصات على المنفذ.
customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
if !exists {
customHandlerPort = "8080"
} // 1)
mux := http.NewServeMux() // 2)
mux.HandleFunc("/order", orderHandler) // 3)
fmt.Println("Go server Listening on: ", customHandlerPort)
log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) // 4)