フルスタック開発者のためのバックエンド エンジニアリング シリーズのパート 2 へようこそ! ?今日は、最も基本的なトピックの 1 つである、Go を使用した RESTful API の構築 について詳しく説明します。内部ツールを構築する場合でも、パブリック API を構築する場合でも、RESTful エンドポイントを構造化して実装する方法を理解することが重要です。
この投稿では以下について説明します:
最後までに、Go でスケーラブルな RESTful API を設計および実装する方法をしっかりと理解できるようになります。始めましょう! ?
コードの説明に入る前に、API が RESTful になる理由を簡単に説明しましょう。 REST (Representational State Transfer) は、次の原則に従った API を構築するためのアーキテクチャ スタイルです。
Go と Gorilla Mux ルーターを使用してユーザーを管理するための基本的な CRUD API を構築しましょう。私たちの API には次のエンドポイントがあります:
HTTP Method | Endpoint | Action |
---|---|---|
GET | /users | Retrieve all users |
GET | /users/{id} | Retrieve a specific user |
POST | /users | Create a new user |
PUT | /users/{id} | Update an existing user |
DELETE | /users/{id} | Delete a user |
Tout d'abord, installez le routeur Gorilla Mux pour le routage :
go get -u github.com/gorilla/mux
Créez un simple fichier main.go pour commencer :
package main import ( "log" "net/http" "github.com/gorilla/mux" ) func main() { r := mux.NewRouter() // Define routes here http.Handle("/", r) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
Maintenant, définissons nos gestionnaires d'API. Celles-ci correspondront à nos actions CRUD. Nous utiliserons une simple carte en mémoire pour stocker les données utilisateur pour cet exemple.
type User struct { ID string `json:"id"` Name string `json:"name"` Age int `json:"age"` } var users = make(map[string]User)
Nous implémenterons chaque opération CRUD : Créer, Lire, Mettre à jour et Supprimer utilisateurs.
func getUsers(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var userList []User for _, user := range users { userList = append(userList, user) } json.NewEncoder(w).Encode(userList) }
func getUser(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) user, found := users[params["id"]] if !found { http.Error(w, "User not found", http.StatusNotFound) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(user) }
func createUser(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var user User _ = json.NewDecoder(r.Body).Decode(&user) users[user.ID] = user w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(user) }
func updateUser(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) user, found := users[params["id"]] if !found { http.Error(w, "User not found", http.StatusNotFound) return } _ = json.NewDecoder(r.Body).Decode(&user) user.ID = params["id"] // Ensure the ID stays the same users[params["id"]] = user w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(user) }
func deleteUser(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) _, found := users[params["id"]] if !found { http.Error(w, "User not found", http.StatusNotFound) return } delete(users, params["id"]) w.WriteHeader(http.StatusNoContent) }
Maintenant que nous avons défini nos gestionnaires, ajoutons les routes à notre routeur dans la fonction principale :
func main() { r := mux.NewRouter() r.HandleFunc("/users", getUsers).Methods("GET") r.HandleFunc("/users/{id}", getUser).Methods("GET") r.HandleFunc("/users", createUser).Methods("POST") r.HandleFunc("/users/{id}", updateUser).Methods("PUT") r.HandleFunc("/users/{id}", deleteUser).Methods("DELETE") http.Handle("/", r) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
Vous pouvez tester votre API à l'aide de Postman ou des commandes curl. Voici comment créer un nouvel utilisateur et récupérer des utilisateurs :
curl -X POST http://localhost:8080/users \ -H "Content-Type: application/json" \ -d '{"id":"1", "name":"John Doe", "age":30}'
curl -X GET http://localhost:8080/users
curl -X GET http://localhost:8080/users/1
curl -X PUT http://localhost:8080/users/1 \ -H "Content-Type: application/json" \ -d '{"name":"John Smith", "age":31}'
curl -X DELETE http://localhost:8080/users/1
Maintenant que nous avons créé une API RESTful de base, il est temps d'intégrer la prise en charge de la base de données afin que nous puissions conserver nos données. Dans le prochain article, nous aborderons l'utilisation d'un ORM pour connecter notre API Go à une base de données. Restez à l'écoute pour la partie 3 ! ?
以上がGo を使用した RESTful API の構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。