使用 Go 构建您的第一个 REST API – 让我们开始吧!
那么,您已经听说过有关 Go 的热议,对吧?它快速、简单,基本上是当今后端开发的摇滚明星。如果您是 Go 新手或者只是想用它构建一些很酷的东西,那么您来对地方了。本周,我们将深入研究如何使用 Go 构建您自己的 REST API,所以系好安全带——这将是一次有趣的旅程!
现在,到底为什么这么多开发者对 Go 着迷呢?好吧,想象一下:谷歌工程师厌倦了等待他们的程序编译,决定创建一些不会让他们想要抓狂的东西。输入 Go——一种不仅可以完成工作,而且可以快速、轻松地完成工作的语言。
Go 是为当今的硬件而构建的,充分利用了多核系统。它的秘密武器? Goroutines——这些神奇的小型并发工作者,可以毫不费力地同时处理大量任务。无论您是在构建 Web 应用程序、API 还是微服务,Go 都能让一切顺利运行,就像您一直梦想的运转良好的机器一样。
最重要的是:Go 非常容易学。无论您是从 Python、Java 还是像 PHP 这样“经典”的东西切换过来,在说“Hello,World!”之前,您都将开始使用 Go 进行编码。而且它运行快——非常快。还需要我多说吗?
好了,闲聊够了,让我们动手吧。首先,我们需要建立一个简单的 Go 项目。别担心,我已经帮你解决了:
确保已安装 Go。如果没有,请在这里获取。
现在,让我们创建一个项目目录并初始化项目:
mkdir go-rest-api cd go-rest-api go mod init github.com/yourusername/go-rest-api
这就是事情变得令人兴奋的地方!我们将构建一个超级简单的 API 来管理书籍列表(因为谁不喜欢书籍?)。我们的 API 将具有以下端点:
准备好了吗?让我们深入研究代码:
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)) }
go get -u github.com/gorilla/mux
处理程序:我们设置了 getBooks、getBook 和 createBook 函数来处理 HTTP 请求。他们使用 Go 的 net/http 包来处理响应和数据编码/解码。简单!
JSON 编码:Go 内置的 json 包在这里完成繁重的工作,将我们的数据转换为 JSON 格式,以便客户端和 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中文网其他相关文章!