Go で最初の REST API を構築 – 始めましょう!
それで、Go に関する話題を聞いたことがあるでしょう?高速でシンプル、そして基本的に最近のバックエンド開発のロックスターです。 Go を初めて使用する場合、または Go を使って何か素晴らしいものを構築したいと考えている場合は、ここが正しい場所です。今週は、Go を使用して独自の REST API を構築する方法を詳しく説明します。楽しい取り組みになるので、しっかり準備をしてください!
では、なぜこれほど多くの開発者が Go に気絶しているのでしょうか?想像してみてください。Google のエンジニアは、プログラムがコンパイルされるのを待ち続けることにうんざりし、髪の毛をかきむしりたくなるようなものを作成することにしました。 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
ハンドラー: HTTP リクエストを処理するために getBooks、getBook、createBook 関数をセットアップしました。 Go の net/http パッケージを使用して、応答とデータのエンコード/デコードを処理します。簡単です!
JSON エンコーディング: ここでは Go の組み込み json パッケージが重労働を行っており、クライアントと API 間の通信を容易にするためにデータを JSON 形式に変換します。
ここからは楽しい部分です。これを実行してみましょう。ターミナルで次を実行するだけです:
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"
バックエンド開発において Go ができることに関して言えば、この小さな API は氷山の一角にすぎません。来週は、認証を追加し (はい、完全な JWT に移行します)、これらのエンドポイントを望ましくない訪問者から保護することでレベルアップします。
パート 2 をお楽しみに -- Go で JWT (JSON Web Token) を使用して REST API で認証用のミドルウェアをセットアップする
以上がGo で最初の REST API を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。