Bienvenue dans la deuxième partie de notre série Ingénierie backend pour les développeurs Full Stack ! ? Aujourd'hui, nous abordons l'un des sujets les plus fondamentaux : Créer des API RESTful avec Go. Que vous construisiez un outil interne ou une API publique, il est essentiel de comprendre comment structurer et implémenter des points de terminaison RESTful.
Dans cet article, nous aborderons :
À la fin, vous saurez parfaitement comment concevoir et implémenter des API RESTful évolutives dans Go. Commençons ! ?
Avant de plonger dans le code, examinons rapidement ce qui constitue une API RESTful. REST (Representational State Transfer) est un style architectural permettant de créer des API qui suivent ces principes :
Créons une API CRUD de base pour gérer les utilisateurs utilisant Go et le routeur Gorilla Mux. Notre API aura les points de terminaison suivants :
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 |
Installieren Sie zunächst den Gorilla Mux-Router für das Routing:
go get -u github.com/gorilla/mux
Erstellen Sie zunächst eine einfache main.go-Datei:
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)) }
Jetzt definieren wir unsere API-Handler. Diese werden unseren CRUD-Aktionen entsprechen. Für dieses Beispiel verwenden wir eine einfache In-Memory-Map zum Speichern von Benutzerdaten.
type User struct { ID string `json:"id"` Name string `json:"name"` Age int `json:"age"` } var users = make(map[string]User)
Wir implementieren jede CRUD-Operation: Erstellen, Lesen, Aktualisieren und Löschen Benutzer.
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) }
Da wir nun unsere Handler definiert haben, fügen wir die Routen zu unserem Router in der Hauptfunktion hinzu:
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)) }
Sie können Ihre API mit Postman oder Curl-Befehlen testen. So können Sie einen neuen Benutzer erstellen und Benutzer abrufen:
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
Da wir nun eine grundlegende RESTful-API erstellt haben, ist es an der Zeit, Datenbankunterstützung zu integrieren, damit wir unsere Daten beibehalten können. Im nächsten Beitrag werden wir uns mit der Verwendung eines ORM befassen, um unsere Go-API mit einer Datenbank zu verbinden. Seien Sie gespannt auf Teil 3! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!