728x90

참고영상 : Como Programar uma API REST Simples em Golang Parte 3 # 20

 

더보기

main.go 수정

이전 내용에 추가 및 수정.

* import 추가
* user 데이터 등록(post) 함수 추가
* 핸들러 로직 추가

package main

import (
	...
    
	"io/ioutil"
    
	...
)

type User struct { ... }

var users = []User{ ... }

func HttpInfo(r *http.Request) { ... }

func setJsonHeader(w http.ResponseWriter) { ... }

func main() {
	fmt.Println("Api Connected Port 3000....")

	r := mux.NewRouter().StrictSlash(true)

	r.HandleFunc("/users", getUsers).Methods("GET")
	r.HandleFunc("/users/{id}", getUser).Methods("GET")

	// user 데이터 추가
	r.HandleFunc("/users", postUser).Methods("POST")

	log.Fatal(http.ListenAndServe(":3000", r))
}

func getUsers(w http.ResponseWriter, r *http.Request) {
	...
}

func getUser(w http.ResponseWriter, r *http.Request) {
	...
}

// 추가 : user 정보 추가
func postUser(w http.ResponseWriter, r *http.Request) {
	setJsonHeader(w)
	HttpInfo(r)

	body, _ := ioutil.ReadAll(r.Body)

	var user User
	err := json.Unmarshal(body, &user)
    
	defer r.Body.Close()

	if err != nil {
		log.Fatal(err)
	}

	users = append(users, user)

	json.NewEncoder(w).Encode(users)
}

 

body, _ := ioutil.ReadAll(r.Body)

r.Body의 값에서 EOF를 만날 때까지 Read를 해주는 함수.

 

err := json.Unmarshal(body, &user)

json.Unmarshal는 바이트 슬라이스나 문자열을 논리적 자료 구조로 변경하는 함수.

첫 번째 파라미터에는 JSON 데이터(body)를, 두 번째 파라미터에는 출력할 구조체(user)를 포인터로 지정합니다.

리턴 값은 에러 객체이지만, 에러가 없을 경우, 두 번째 파라미터에 원래 데이터가 저장됩니다.

 

defer r.Body.Close()

r.Body를 사용한 이후에는 Close를 호출하여 닫아줘야 합니다.

 

확장 프로그램 다운 - Postman (링크)

REST 테스트를 위한 프로그램을 설치.

이를 통해 Golang server를 테스트할 수 있습니다.

 

크롬 웹 스토어 - Postman

 

Postman - Get 결과 화면

 

Postman - Post 과정 및 결과 화면
728x90
Posted by 게으른거북
: