풀 스택 개발자를 위한 백엔드 엔지니어링 시리즈 2부에 오신 것을 환영합니다! ? 오늘은 가장 기본적인 주제 중 하나인 RESTful API 구축을 Go로 살펴보겠습니다. 내부 도구를 구축하든 공개 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 |
먼저 라우팅을 위해 Gorilla Mux 라우터를 설치합니다.
go get -u github.com/gorilla/mux
시작하려면 간단한 main.go 파일을 만드세요.
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)) }
이제 API 핸들러를 정의해 보겠습니다. 이는 CRUD 작업에 해당합니다. 이 예에서는 간단한 인메모리 맵을 사용하여 사용자 데이터를 저장하겠습니다.
type User struct { ID string `json:"id"` Name string `json:"name"` Age int `json:"age"` } var users = make(map[string]User)
각 CRUD 작업을 구현합니다: 생성, 읽기, 업데이트, 삭제
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) }
이제 핸들러를 정의했으므로 기본 함수에서 라우터에 경로를 추가해 보겠습니다.
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)) }
Postman 또는 컬 명령을 사용하여 API를 테스트할 수 있습니다. 새 사용자를 생성하고 사용자를 검색하는 방법은 다음과 같습니다.
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
이제 기본 RESTful API를 구축했으므로 데이터를 유지할 수 있도록 데이터베이스 지원을 통합할 차례입니다. 다음 게시물에서는 ORM을 사용하여 Go API를 데이터베이스에 연결하는 방법을 살펴보겠습니다. 3부도 기대해 주세요! ?
위 내용은 Go로 RESTful API 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!