首頁 >後端開發 >Golang >使用 Go 為 AG-Grid 建立 API

使用 Go 為 AG-Grid 建立 API

Barbara Streisand
Barbara Streisand原創
2024-11-22 22:51:14546瀏覽

Create an API for AG-Grid with Go

AG-Grid 是一個強大的 JavaScript 資料網格庫,非常適合建立具有排序、過濾和分頁等功能的動態高效能表格。在本文中,我們將在 Go 中建立一個 API 來支援 AG-Grid,從而實現高效的伺服器端資料操作,包括過濾、排序和分頁。透過將 AG-Grid 與 Go API 集成,我們將開發一個強大的解決方案,即使在處理大型資料集時也能確保平穩的效能。

先決條件

  • 去1.21
  • MySQL

設定項目

設定 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

建立一個名為「example」的測試資料庫,並執行database.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=

資料庫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
}

路由器.go

此檔案為 Gin Web 應用程式設定路由。它初始化 DataTables API 的路由器並在根 URL 處提供靜態 index.html 檔案。

package router

import (
    "app/controllers"

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

func SetupRouter() {
    productController := controllers.ProductController{}
    router := gin.Default()
    router.StaticFile("/", "./public/index.html")
    router.GET("/api/products", productController.Index)
    router.Run()
}

產品.go

此文件定義應用程式的產品模型。

package models

type Product struct {
    Id int
    Name string
    Price float64
}

產品控制器.go

此檔案定義了一個函數來處理傳入請求並傳回 DataTables 資料。

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) {
    size, _ := strconv.Atoi(c.DefaultQuery("length", "10"))
    start, _ := strconv.Atoi(c.Query("start"))
    order := "id"
    if c.Query("order[0][column]") != "" {
        order = c.Query("columns[" + c.Query("order[0][column]") + "][data]")
    }
    direction := c.DefaultQuery("order[0][dir]", "asc")
    var products []models.Product
    query := config.DB.Model(&products)
    var recordsTotal, recordsFiltered int64
    query.Count(&recordsTotal)
    search := c.Query("search[value]")
    if search != "" {
        search = "%" + search + "%"
        query.Where("name like ?", search)
    }
    query.Count(&recordsFiltered)
    query.Order(order + " " + direction).
        Offset(start).
        Limit(size).
        Find(&products)
    c.JSON(http.StatusOK, gin.H{"draw": c.Query("draw"), "recordsTotal": recordsTotal, "recordsFiltered": recordsFiltered, "data": products})
}

product_controller.go 檔案定義了一個控制器,用於使用 Gin 框架管理 Go 應用程式中與產品相關的 API 請求。它具有一個 Index 方法,可根據分頁、排序​​和搜尋的查詢參數檢索分頁的產品清單。此方法提取分頁參數,建構查詢以從資料庫中取得產品,並在提供搜尋字詞的情況下套用篩選。在統計匹配產品總數後,它會對結果進行排序和限制,然後傳回包含產品資料和總數的 JSON 回應,以便於與前端應用程式整合。

主機程式

該檔案是我們應用程式的主要入口點。它將創建並設定 Gin Web 應用程式。

package main

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

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

索引.html

<!DOCTYPE html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/ag-grid-community/dist/ag-grid-community.min.js"></script>
</head>
<body>
    <div>



<p>The index.html file sets up a web page that uses the AG-Grid library to display a dynamic data grid for products. It includes a grid styled with the AG-Grid theme and a JavaScript section that constructs query parameters for pagination, sorting, and filtering. The grid is configured with columns for ID, Name, and Price, and it fetches product data from an API endpoint based on user interactions. Upon loading, the grid is initialized, allowing users to view and manipulate the product list effectively.</p>

<h2>
  
  
  Run project
</h2>



<pre class="brush:php;toolbar:false">go run main.go

開啟網頁瀏覽器並前往http://localhost:8080

你會發現這個測試頁。

Create an API for AG-Grid with Go

測試

頁面大小測試

從「頁面大小」下拉清單中選擇 50 來變更頁面大小。每頁將顯示 50 筆記錄,最後一頁將從 5 筆變為 2 筆。

Create an API for AG-Grid with Go

分選測試

點選第一列的標題。您將看到 id 列將按降序排序。

Create an API for AG-Grid with Go

搜尋測試

在“名稱”欄的搜尋文字方塊中輸入“否”,您將看到過濾後的結果資料。

Create an API for AG-Grid with Go

結論

總之,我們有效地將 AG-Grid 與 Go API 集成,以創建強大且高效的資料網格解決方案。透過利用 Go 的後端功能,我們讓 AG-Grid 能夠處理伺服器端過濾、排序和分頁,即使在處理大型資料集時也能確保流暢的效能。這種整合不僅優化了資料管理,還增強了前端動態、響應式表格的使用者體驗。透過 AG-Grid 和 Go 的協調工作,我們建立了一個非常適合實際應用的可擴展且高效能的網格系統。

原始碼:https://github.com/stackpuz/Example-AG-Grid-Go

在幾分鐘內建立一個 CRUD Web 應用程式:https://stackpuz.com

以上是使用 Go 為 AG-Grid 建立 API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn