首頁 > 後端開發 > Golang > 主體

使用 Go 建立您的第一個 REST API

Linda Hamilton
發布: 2024-10-02 14:07:30
原創
113 人瀏覽過

Building Your First REST API with Go

使用 Go 建立您的第一個 REST API – 讓我們開始吧!

那麼,您已經聽說過有關 Go 的熱議,對吧?它快速、簡單,基本上是當今後端開發的搖滾明星。如果您是 Go 新手或只是想用它來建造一些很酷的東西,那麼您來對地方了。本週,我們將深入研究如何使用 Go 建立您自己的 REST API,所以請係好安全帶——這將是一次有趣的旅程!

為什麼要去?

現在,到底為什麼這麼多開發者對 Go 著迷呢?好吧,想像一下:谷歌工程師厭倦了等待他們的程式編譯,決定創建一些不會讓他們想要抓狂的東西。輸入 Go——一種不僅可以完成工作,而且可以快速、輕鬆地完成工作的語言。

Go 是為當今的硬體而建構的,充分利用了多核心系統。它的秘密武器? Goroutines——這些神奇的小型並發工作者,可以毫不費力地同時處理大量任務。無論您是在建立 Web 應用程式、API 還是微服務,Go 都能讓一切順利運行,就像您一直夢想的運作良好的機器一樣。

最重要的是:Go 非常容易學。無論您是從 Python、Java 還是像 PHP 這樣「經典」的東西切換過來,在說「Hello,World!」之前,您都將開始使用 Go 進行程式設計。而且它運行——非常快。還需要我多說嗎?

設定您的 Go 項目

好了,閒聊夠了,讓我們動手吧。首先,我們需要建立一個簡單的 Go 專案。別擔心,我已經幫你解決了:

  1. 確保已安裝 Go。如果沒有,請在這裡獲取。

  2. 現在,讓我們建立一個專案目錄並初始化專案:

   mkdir go-rest-api
   cd go-rest-api
   go mod init github.com/yourusername/go-rest-api
登入後複製
  1. 在此目錄中,建立一個名為 main.go 的新文件,並準備好進行一些編碼魔法。

編寫API

這就是事情變得令人興奮的地方!我們將建立一個超級簡單的 API 來管理書籍清單(因為誰不喜歡書籍?)。我們的 API 將具有以下端點:

  • GET /books – 取得所有書籍(耶,書籍!)
  • POST /books – 新增新書
  • GET /books/:id – 透過 ID 取得特定書籍(因為並非所有書籍都是一樣的)

準備好了嗎?讓我們深入研究程式碼:

package main

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

    "github.com/gorilla/mux"
)

type Book struct {
    ID     int    `json:"id"`
    Title  string `json:"title"`
    Author string `json:"author"`
}

var books []Book

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

// Get a single book by ID
func getBook(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    id, err := strconv.Atoi(params["id"])
    if err != nil {
        http.Error(w, "Invalid book ID", http.StatusBadRequest)
        return
    }
    for _, book := range books {
        if book.ID == id {
            w.Header().Set("Content-Type", "application/json")
            json.NewEncoder(w).Encode(book)
            return
        }
    }
    http.Error(w, "Book not found", http.StatusNotFound)
}

// Add a new book
func createBook(w http.ResponseWriter, r *http.Request) {
    var book Book
    _ = json.NewDecoder(r.Body).Decode(&book)
    book.ID = len(books) + 1 // Assign an ID (we’re just winging it here)
    books = append(books, book)
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(book)
}

func main() {
    // Add some dummy data to start with
    books = append(books, Book{ID: 1, Title: "The Go Programming Language", Author: "Alan A. A. Donovan"})
    books = append(books, Book{ID: 2, Title: "Learning Go", Author: "Jon Bodner"})

    // Initialize the router
    r := mux.NewRouter()

    // Define the endpoints
    r.HandleFunc("/books", getBooks).Methods("GET")
    r.HandleFunc("/books/{id}", getBook).Methods("GET")
    r.HandleFunc("/books", createBook).Methods("POST")

    // Start the server
    fmt.Println("Server is running on port 8000...")
    log.Fatal(http.ListenAndServe(":8000", r))
}
登入後複製

分解它

  1. Mux Router:我們使用 gorilla/mux 來處理 API 中的路由。它可以輕鬆定義路由,並且是在 Go 中建立 Web 服務的首選。您可以使用以下命令安裝它:
   go get -u github.com/gorilla/mux
登入後複製
  1. 處理程序:我們設定了 getBooks、getBook 和 createBook 函數來處理 HTTP 請求。他們使用 Go 的 net/http 套件來處理回應和資料編碼/解碼。簡單!

  2. JSON 編碼:Go 內建的 json 套件在這裡完成繁重的工作,將我們的資料轉換為 JSON 格式,以便客戶端和 API 之間輕鬆通訊。

運行 API

現在到了有趣的部分——讓我們運行這個東西!在您的終端機中,只需執行:

go run main.go
登入後複製

繁榮!您的 API 已啟動並正在執行。現在您可以使用Postman或curl等工具來測試它:

  • 取得所有書籍
  curl http://localhost:8000/books
登入後複製
  • 取得一本特定的書
  curl http://localhost:8000/books/1
登入後複製
  • 新增新書
  curl -X POST http://localhost:8000/books -d '{"title":"New Book","author":"New Author"}' -H "Content-Type: application/json"
登入後複製

接下來是什麼?

這個小 API 只是 Go 在後端開發的冰山一角。下週,我們將透過添加身份驗證(是的,我們將採用完整的 JWT)並保護這些端點免受不必要的訪客的侵害來進行升級。

敬請關注第 2 部分-在 Go 中使用 JWT(JSON Web 令牌)在 REST API 中設定用於驗證的中間件

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

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!