首頁  >  文章  >  後端開發  >  使用 Go 建立簡單的 REST API

使用 Go 建立簡單的 REST API

Susan Sarandon
Susan Sarandon原創
2024-10-31 22:06:44540瀏覽

Building a simple REST API with Go

Go 是一種很棒的系統程式語言,但它在 Web 上也很出色,尤其是在建立 REST API 時。本指南逐步介紹如何使用 Go 的標準庫建立簡單的 REST API。我們將建立一個 API 來管理伺服器列表,以便我們可以新增、刪除和查看伺服器記錄。我們還將使用 Go 1.22 新的路由器增強功能進行方法匹配,這使我們能夠擁有更清晰的路由和處理程序。

本指南假設您對 Go 有基本的了解並且它已安裝在您的電腦上。

設定

為您的專案建立一個新目錄並初始化 Go 模組:

mkdir server-api
cd server-api
go mod init server-api

守則

建立一個名為 main.go 的檔案。我們將使用 Go 的標準 http 套件 - 它擁有基本 API 所需的一切。

package main

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

首先,讓我們定義伺服器的樣子。我們將保持簡單 - 只需一個 ID、名稱、IP 位址和區域:

type Server struct {
    ID     string `json:"id"`
    Name   string `json:"name"`
    IP     string `json:"ip"`
    Region string `json:"region`
}

我們將使用切片將伺服器儲存在記憶體中。在真實的應用程式中,您可能會使用資料庫:

var servers = []Server{
    {ID: "srv1", Name: "prod-1", IP: "10.0.1.1", Region: "us-east"},
    {ID: "srv2", Name: "prod-2", IP: "10.0.1.2", Region: "eu-west"},
}

建立路由器

接下來,我們將設定路線。 Go 1.22 引入了一種新的路由語法,使這變得非常簡單:

func main() {
    mux := http.NewServeMux()

    mux.HandleFunc("GET /servers", listServers)
    mux.HandleFunc("GET /servers/{id}", showServer)
    mux.HandleFunc("POST /servers", createServer)
    mux.HandleFunc("DELETE /servers/{id}", deleteServer)

    fmt.Println("Server starting on port 8080...")
    log.Fatal(http.ListenAndServe(":8080", mux))
}

處理程式

現在讓我們實作每個處理程序。首先,列出所有伺服器:

func listServers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(servers)
}

透過ID取得單一伺服器:

func showServer(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    id := r.PathValue("id")

    for _, server := range servers {
        if server.ID == id {
            json.NewEncoder(w).Encode(server)
            return
        }
    }

    http.Error(w, "Server not found", http.StatusNotFound)
}

建立新伺服器:

func createServer(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    var server Server
    if err := json.NewDecoder(r.Body).Decode(&server); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    servers = append(servers, server)
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(server)
}

最後,刪除伺服器:

func deleteServer(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id")

    for i, server := range servers {
        if server.ID == id {
            servers = append(servers[:i], servers[i+1:]...)
            w.WriteHeader(http.StatusNoContent)
            return
        }
    }

    http.Error(w, "Server not found", http.StatusNotFound)
}

使用API

準備好程式碼後,執行它:

go run main.go

以下是如何使用 cURL 與每個端點互動:

列出所有伺服器:

curl localhost:8080/servers

取得特定伺服器:

curl localhost:8080/servers/srv1

新增伺服器:

curl -X POST localhost:8080/servers   -H "Content-Type: application/json";   -d '{"id":"srv3","name":"prod-3","ip":"10.0.1.3","region":"ap-south"}';

刪除伺服器:

curl -X DELETE localhost:8080/servers/srv1

接下來是什麼?

這是一個基本的 API,但您可以添加很多內容:

  • 輸入驗證
  • 正確的錯誤處理
  • 使用 PostgreSQL 等資料庫保存伺服器
  • 身份驗證
  • 請求記錄
  • 單元測試

標準函式庫具有令人驚訝的建置 API 的能力。雖然有更多功能齊全的框架可用,但從標準庫開始可以幫助您了解基礎知識,而不會在幕後發生任何魔法。

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

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