تشغيل المشروع

go run main.go

افتح متصفح الويب وانتقل إلى http://localhost:8080

اختبار

احصل على جميع المنتجات

انقر على زر \\\"الحصول على المنتجات\\\". ستعيد واجهة برمجة التطبيقات جميع بيانات المنتجات.

\\\"Create

الحصول على المنتج حسب المعرف

انقر فوق الزر \\\"الحصول على المنتج\\\" وأدخل \\\"1\\\" لمعرف المنتج. ستعيد واجهة برمجة التطبيقات بيانات المنتج.

\\\"Create

إنشاء المنتج

انقر فوق الزر \\\"إنشاء منتج\\\" وأدخل \\\"اختبار-إنشاء\\\" لاسم المنتج و\\\"100\\\" للسعر. ستعيد واجهة برمجة التطبيقات (API) منتجًا تم إنشاؤه حديثًا.

\\\"Create

تحديث المنتج

انقر فوق الزر \\\"تحديث المنتج\\\" وأدخل \\\"101\\\" لمعرف المنتج و\\\"اختبار التحديث\\\" للاسم و\\\"200\\\" للسعر. ستعيد واجهة برمجة التطبيقات (API) منتجًا محدثًا.

\\\"Create

حذف المنتج

انقر فوق الزر \\\"حذف المنتج\\\" وأدخل \\\"101\\\" لمعرف المنتج. لن تُرجع واجهة برمجة التطبيقات أي شيء، وهو أمر مقبول لأننا لا نعيد أي شيء من واجهة برمجة التطبيقات الخاصة بنا.

\\\"Create

خاتمة

في هذه المقالة، تعلمت كيفية إنشاء إطار عمل Gin وإعداده من أجل إنشاء واجهة برمجة تطبيقات CRUD. استخدم GORM باعتباره ORM لتنفيذ عمليات CRUD على قاعدة البيانات. اختبر واجهة برمجة التطبيقات الخاصة بنا باستخدام JavaScript. أتمنى أن تستمتع بالمقال.

كود المصدر: https://github.com/StackPuz/Example-CRUD-Go

إنشاء تطبيق ويب CRUD: https://stackpuz.com

","image":"http://www.luping.net/uploads/20240815/172373328366be1523a3829.jpg","datePublished":"2024-08-15T22:48:03+08:00","dateModified":"2024-08-15T22:48:03+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > قم بإنشاء واجهة برمجة تطبيقات CRUD باستخدام Go

قم بإنشاء واجهة برمجة تطبيقات CRUD باستخدام Go

تم النشر بتاريخ 2024-08-15
تصفح:291

Create a CRUD API with Go

تعد عمليات CRUD (الإنشاء والقراءة والتحديث والحذف) هي الوظيفة الأساسية لأي تطبيق ويب عند العمل مع قاعدة بيانات. سيوضح لك هذا المثال كيفية إنشاء CRUD API باستخدام Go واستخدام MySQL كقاعدة بيانات.

المتطلبات الأساسية

  • الذهاب 1.21
  • ماي إس كيو إل

مشروع الإعداد

إعداد تبعيات مشروع Go.

go mod init app
go get github.com/gin-gonic/gin
go get gorm.io/gorm
go get gorm.io/driver/mysql
go get github.com/joho/godotenv

قم بإنشاء قاعدة بيانات اختبارية باسم "مثال" وقم بتشغيل ملف قاعدة البيانات.sql لاستيراد الجدول والبيانات.

هيكل المشروع

├─ .env
├─ main.go
├─ config
│  └─ db.go
├─ controllers
│  └─ product_controller.go
├─ models
│  └─ product.go
├─ public
│  └─ index.html
└─ router
   └─ router.go

ملفات المشروع

.env

يحتوي هذا الملف على معلومات اتصال قاعدة البيانات.

DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=example
DB_USER=root
DB_PASSWORD=

db.go

يقوم هذا الملف بإعداد اتصال قاعدة البيانات باستخدام GORM. يعلن عن متغير عام DB للاحتفاظ بمثيل اتصال قاعدة البيانات لاستخدامه لاحقًا في تطبيقنا.

package config

import (
    "fmt"
    "os"

    "github.com/joho/godotenv"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "gorm.io/gorm/schema"
)

var DB *gorm.DB

func SetupDatabase() {
    godotenv.Load()
    connection := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true", os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_DATABASE"))
    db, _ := gorm.Open(mysql.Open(connection), &gorm.Config{NamingStrategy: schema.NamingStrategy{SingularTable: true}})
    DB = db
}

router.go

يقوم هذا الملف بإعداد التوجيه لتطبيق ويب Gin. فهو يقوم بتهيئة جهاز التوجيه، ويقدم ملف Index.html ثابتًا على عنوان URL الجذر، ويحدد مسارات API لعمليات CRUD.

package router

import (
    "app/controllers"

    "github.com/gin-gonic/gin"
)

func SetupRouter() {
    productController := controllers.ProductController{}
    router := gin.Default()
    router.StaticFile("/", "./public/index.html")
    router.Group("/api").
        GET("/products", productController.Index).
        POST("/products", productController.Create).
        GET("/products/:id", productController.Get).
        PUT("/products/:id", productController.Update).
        DELETE("/products/:id", productController.Delete)
    router.Run()
}

Product.go

يحدد هذا الملف نموذج المنتج للتطبيق. يستخدم هذا النموذج لعمليات قاعدة البيانات التي تتضمن المنتجات.

package models

type Product struct {
    Id int `gorm:"primaryKey;autoIncrement"`
    Name string
    Price float64
}

Product_controller.go

يحدد هذا الملف جميع الوظائف المطلوبة للتعامل مع الطلبات الواردة وتنفيذ أي عمليات CRUD.

package controllers

import (
    "app/config"
    "app/models"
    "net/http"
    "strconv"

    "github.com/gin-gonic/gin"
)

type ProductController struct {
}

func (con *ProductController) Index(c *gin.Context) {
    var products []models.Product
    config.DB.Find(&products)
    c.JSON(http.StatusOK, products)
}

func (con *ProductController) Get(c *gin.Context) {
    var product models.Product
    config.DB.First(&product, c.Params.ByName("id"))
    c.JSON(http.StatusOK, product)
}

func (con *ProductController) Create(c *gin.Context) {
    var product models.Product
    c.BindJSON(&product)
    if err := config.DB.Create(&product).Error; err != nil {
        c.AbortWithError(http.StatusBadRequest, err)
        return
    }
    c.JSON(http.StatusOK, product)
}

func (con *ProductController) Update(c *gin.Context) {
    var product models.Product
    c.BindJSON(&product)
    product.Id, _ = strconv.Atoi(c.Params.ByName("id"))
    if err := config.DB.Updates(&product).Error; err != nil {
        c.AbortWithError(http.StatusBadRequest, err)
        return
    }
    c.JSON(http.StatusOK, product)
}

func (con *ProductController) Delete(c *gin.Context) {
    var product models.Product
    if err := config.DB.Delete(&product, c.Params.ByName("id")).Error; err != nil {
        c.AbortWithError(http.StatusBadRequest, err)
        return
    }
    c.Status(http.StatusOK)
}

c.BindJSON() تحليل حمولة JSON من نص الطلب إلى بنية Go.

config.DB مثيل GORM الذي يستخدم لتنفيذ عملية قاعدة البيانات المطلوبة.

يرسل c.JSON() استجابة JSON بنتيجة العملية ورمز حالة HTTP المناسب.

main.go

هذا الملف هو نقطة الدخول الرئيسية لتطبيقنا. سيقوم بإنشاء وإعداد تطبيق الويب Gin.

package main

import (
    "app/config"
    "app/router"
)

func main() {
    config.SetupDatabase()
    router.SetupRouter()
}

Index.html

سيتم استخدام هذا الملف لإنشاء واجهة مستخدم أساسية لاختبار واجهة برمجة التطبيقات الخاصة بنا.


    

Example CRUD

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/stackpuz/create-a-crud-api-with-go-964?1 إذا كان هناك أي انتهاك، فيرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3