قم بتنظيم التعليمات البرمجية الخاصة بك بطريقة تجعل من السهل فهمها وتوسيعها. تتضمن البنية الشائعة فصل التعليمات البرمجية الخاصة بك إلى مجلدات مثل النماذج، والمعالجات، والمسارات، والبرامج الوسيطة، والأدوات المساعدة، والتكوين.
مثال للهيكل:
go-rest-api/ |-- main.go |-- config/ | |-- config.go |-- handlers/ | |-- user.go |-- models/ | |-- user.go |-- routes/ | |-- routes.go |-- middlewares/ | |-- logging.go |-- utils/ | |-- helpers.go
تخزين إعدادات التكوين (مثل بيانات اعتماد قاعدة البيانات وأرقام المنافذ وما إلى ذلك) في متغيرات البيئة أو ملفات التكوين. استخدم حزمة مثل viper لإدارة التكوينات.
config/config.go:
package config import ( "github.com/spf13/viper" "log" ) type Config struct { Port string DB struct { Host string Port string User string Password string Name string } } var AppConfig Config func LoadConfig() { viper.SetConfigName("config") viper.AddConfigPath(".") viper.AutomaticEnv() if err := viper.ReadInConfig(); err != nil { log.Fatalf("Error reading config file, %s", err) } err := viper.Unmarshal(&AppConfig) if err != nil { log.Fatalf("Unable to decode into struct, %v", err) } }
تعامل دائمًا مع الأخطاء بشكل مناسب. إرجاع رسائل خطأ ذات معنى ورموز حالة HTTP.
handlers/user.go:
func GetUserHandler(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) id, err := strconv.Atoi(params["id"]) if err != nil { http.Error(w, "Invalid user ID", http.StatusBadRequest) return } user, err := findUserByID(id) if err != nil { http.Error(w, "User not found", http.StatusNotFound) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(user) }
استخدم البرامج الوسيطة للتسجيل والمصادقة وغير ذلك من الاهتمامات الشاملة.
middlewares/logging.go:
package middlewares import ( "log" "net/http" "time" ) func LoggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() next.ServeHTTP(w, r) log.Printf("%s %s %s", r.Method, r.RequestURI, time.Since(start)) }) }
في main.go أوways/routes.go:
r.Use(middlewares.LoggingMiddleware)
استخدم تشفير وفك تشفير JSON المناسبين. التحقق من صحة بيانات JSON الواردة للتأكد من أنها تلبي البنية المتوقعة.
handlers/user.go:
func CreateUserHandler(w http.ResponseWriter, r *http.Request) { var user models.User if err := json.NewDecoder(r.Body).Decode(&user); err != nil { http.Error(w, "Invalid input", http.StatusBadRequest) return } // Validate user data... users = append(users, user) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(user) }
استخدم قاعدة بيانات لتخزين بياناتك. استخدم حزمة مثل gorm لـ ORM أو sqlx لاستعلامات SQL الأولية.
models/user.go:
package models import "gorm.io/gorm" type User struct { gorm.Model Name string `json:"name"` Email string `json:"email"` }
main.go:
package main import ( "github.com/yourusername/go-rest-api/config" "github.com/yourusername/go-rest-api/routes" "gorm.io/driver/postgres" "gorm.io/gorm" "log" "net/http" ) func main() { config.LoadConfig() dsn := "host=" config.AppConfig.DB.Host " user=" config.AppConfig.DB.User " password=" config.AppConfig.DB.Password " dbname=" config.AppConfig.DB.Name " port=" config.AppConfig.DB.Port " sslmode=disable" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatalf("Could not connect to the database: %v", err) } r := routes.NewRouter(db) log.Println("Starting server on port", config.AppConfig.Port) log.Fatal(http.ListenAndServe(":" config.AppConfig.Port, r)) }
استخدم مكتبة تسجيل منظمة مثل logrus أو zap لتسجيل أفضل.
middlewares/logging.go:
package middlewares import ( "github.com/sirupsen/logrus" "net/http" "time" ) func LoggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() next.ServeHTTP(w, r) logrus.WithFields(logrus.Fields{ "method": r.Method, "url": r.URL.Path, "time": time.Since(start), }).Info("handled request") }) }
تأكد من أن واجهة برمجة التطبيقات الخاصة بك آمنة باستخدام HTTPS، والتحقق من صحة المدخلات وتعقيمها، وتنفيذ المصادقة والترخيص المناسبين.
قم بإصدار واجهة برمجة التطبيقات الخاصة بك للتعامل مع التغييرات دون كسر العملاء الحاليين. ويمكن القيام بذلك عن طريق تضمين الإصدار في عنوان URL، مثل /api/v1/users.
قم بتوثيق واجهة برمجة التطبيقات الخاصة بك باستخدام أدوات مثل Swagger أو Postman لتوفير تعليمات استخدام واضحة للمطورين.
من خلال اتباع أفضل الممارسات هذه، يمكنك إنشاء واجهة برمجة تطبيقات RESTful قوية وقابلة للصيانة وقابلة للتطوير في Go.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3