كيفية كتابة REST API بلغة Go في 30 دقيقة: دليل خطوة بخطوة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا Go مثالي لـ REST API؟



Go (Golang) هي لغة برمجة حديثة ومُجمَّعة، تم إنشاؤها في Google. تجمع بين الأداء العالي للغة C++ وبساطة Python. إذا كنت بحاجة إلى كتابة REST API بسرعة، فإن Go هي واحدة من أفضل الخيارات. في هذه المقالة، سنقوم بإنشاء REST API كامل بلغة Go في غضون 30 دقيقة، باستخدام المكتبة القياسية فقط net/http. سترى كم هو بسيط معالجة طلبات HTTP، وتوجيهها، وإرجاع استجابات JSON.



بنهاية المقالة، ستتمكن من كتابة API خاص بك يمكن نشره على خادم. لن نستخدم أطر عمل خارجية — فقط Go النقية، مما يجعل الكود خفيف الوزن وسريعًا.



الخطوة 1: تثبيت Go وإنشاء المشروع



تثبيت Go

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



go version


يجب أن ترى شيئًا مثل go version go1.22.0 linux/amd64.



إنشاء المشروع

أنشئ دليلاً جديدًا للمشروع وقم بتهيئة وحدة Go:



mkdir go-rest-apicd go-rest-apigo mod init go-rest-api


الآن هيكل المشروع جاهز. سنكتب كل الكود في ملف واحد main.go، حتى لا نعقّد المثال.



الخطوة 2: خادم HTTP بسيط بلغة Go



لنبدأ بخادم HTTP أساسي. افتح الملف main.go وأضف الكود التالي:



package main

import ( "fmt" "log" "net/http")

func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, REST API on Go!") })

log.Println("الخادم يعمل على المنفذ 8080") log.Fatal(http.ListenAndServe(":8080", nil))}


قم بتشغيل الخادم باستخدام الأمر go run main.go وافتح المتصفح على العنوان http://localhost:8080. سترى رسالة ترحيبية. تهانينا — أول خادم HTTP بلغة Go يعمل!



تحليل الكود

  • http.HandleFunc — يسجل معالجًا للمسار "/".
  • http.ListenAndServe — يشغل الخادم على المنفذ 8080.
  • log.Fatal — يعرض خطأ إذا لم يتم تشغيل الخادم.


الخطوة 3: إضافة التوجيه ومعالجة JSON



الآن سنضيف دعم نمط REST: GET, POST, PUT, DELETE. سننشئ "قاعدة بيانات" بسيطة في الذاكرة (شريحة من الهياكل) وندير قائمة المهام (todo list).



هيكل البيانات

أضف في main.go وصف الهيكل Task وشريحة عامة:



type Task struct {    ID   int    `json:"id"`    Name string `json:"name"`}

var tasks []Taskvar nextID int = 1


معالجات المسارات

لننشئ معالجًا رئيسيًا يقوم بتحليل طريقة HTTP واستدعاء الوظيفة المناسبة:



func tasksHandler(w http.ResponseWriter, r *http.Request) {    switch r.Method {    case http.MethodGet:        getTasks(w, r)    case http.MethodPost:        createTask(w, r)    default:        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)    }}

func taskHandler(w http.ResponseWriter, r *http.Request) { // استخراج المعرف من URL idStr := strings.TrimPrefix(r.URL.Path, "/tasks/") id, err := strconv.Atoi(idStr) if err != nil { http.Error(w, "Invalid task ID", http.StatusBadRequest) return }

switch r.Method { case http.MethodGet: getTask(w, r, id) case http.MethodPut: updateTask(w, r, id) case http.MethodDelete: deleteTask(w, r, id) default: http.Error(w, "Method not allowed", http.StatusMethodNot

المدونات

توصيات الكتب