0Pricing
Go Academy · درس

إنشاء خادم HTTP

‏ListenAndServe وHandlerFunc وServeMux

إنشاء خادم HTTP درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

حزمة net/http

توفر مكتبة Go القياسية net/http خادم HTTP/1.1 وHTTP/2 جاهزًا للاستخدام في الإنتاج، من دون تبعيات خارجية.

خادم أساسي

سجّل معالجًا باستخدام http.HandleFunc وابدأ الاستماع باستخدام http.ListenAndServe:

http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))

واجهة http.Handler

أي نوع يطبّق ServeHTTP(ResponseWriter, *Request) يُعد http.Handler. استخدمه للمعالجات التي تحتفظ بحالة، مثل المعالجات التي تتضمن قاعدة بيانات أو إعدادات.

type App struct{ db *sql.DB }

func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    // use a.db
}

ServeMux

تنشئ http.NewServeMux() موجّهًا معزولًا. مرّره إلى http.ListenAndServe لتجنب mux الافتراضي العام، وهو أكثر أمانًا في المكتبات.

mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)

إرسال رموز الحالة

اكتب رمز الحالة باستخدام w.WriteHeader(code) قبل كتابة النص الأساسي. إذا استدعيت w.Write فقط، فستكون الحالة الافتراضية 200.

w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))

كتابة استجابات JSON

اضبط Content-Type قبل كتابة النص الأساسي، ثم استخدم json.Encoder للترميز:

w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)

قراءة الطلب

يمكنك الوصول إلى الطريقة وعنوان URL والترويسات ومعلمات الاستعلام والنص الأساسي عبر بنية *Request.

r.Method          // "GET", "POST", ...
r.URL.Path        // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")

تحليل النص الأساسي لطلب JSON

فك ترميز النص الأساسي للطلب باستخدام json.Decoder. حدّد حجمه باستخدام http.MaxBytesReader لمنع استنفاد الذاكرة.

r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)

إعداد الخادم

اضبط مهلات زمنية باستخدام http.Server مخصص لمنع هجمات العملاء البطيئين:

srv := &http.Server{
    Addr:         ":8080",
    Handler:      mux,
    ReadTimeout:  5 * time.Second,
    WriteTimeout: 10 * time.Second,
    IdleTimeout:  120 * time.Second,
}
srv.ListenAndServe()

HTTPS

استخدم srv.ListenAndServeTLS(certFile, keyFile) لتقديم HTTPS. يمكن أن تكون الشهادات موقعة ذاتيًا (في التطوير) أو صادرة من Let's Encrypt (في الإنتاج عبر golang.org/x/crypto/acme/autocert).

تركيب المعالجات

غلّف المعالجات لإضافة الاهتمامات المشتركة (التسجيل والمصادقة والاسترداد) من دون تعديل منطق الأعمال. أعد المعالج التالي بعد تعديله.

تحقق سريع

لماذا ينبغي ضبط ReadTimeout وWriteTimeout في http.Server؟

مراجعة: إنشاء خادم HTTP

النقاط الرئيسية:

  • استخدم HandleFunc + ListenAndServe للخوادم البسيطة
  • استخدم http.Server مخصصًا مع مهلات زمنية في الإنتاج
  • استخدم ServeMux للتوجيه المعزول
  • استخدم json.NewEncoder(w) لاستجابات JSON

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

هل درس «إنشاء خادم HTTP» مجاني؟

نعم — نص درس «إنشاء خادم HTTP» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء خادم HTTP»؟

‏ListenAndServe وHandlerFunc وServeMux تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «إنشاء خادم HTTP»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء خادم HTTP
  2. التوجيه ومعاملات المسارات
  3. نمط Middleware
  4. الإيقاف السلس
← العودة إلى Go Academy