728x90

참고영상 : Como Programar uma API REST Simples em Golang Parte 2 # 19

 

더보기

main.go 수정

이전 내용에 추가 및 수정.

* impoart 추가

* 서버에서 호출된 정보값 표시 함수 생성

* Header 전달 함수 생성

* 특정 user 정보 호출 함수 생성

* 핸들러 로직 추가

package main

import (
	...

	"fmt"     
	"strconv" 

	...
)

type User struct { ... }

var users = []User{ ... }

// 추가 : 호출된 정보값을 표시
func HttpInfo(r *http.Request) {
	fmt.Printf("%s\t %s\t %s\t %s\r\n", r.Method, r.Proto, r.Host, r.URL)
}

// 추가 : 별도 함수로 구분
func setJsonHeader(w http.ResponseWriter) {
	w.Header().Set("Content-Type", "application/json")
}

func main() {
	// main.go 실행시, 표시
	fmt.Println("Api Connected Port 3000....")

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

	// 핸들러 로직
	// user에 대한 데이터 전체 가져오기
	r.HandleFunc("/users", getUsers).Methods("GET")

	// 특정 user에 대한 데이터 가져오기
	r.HandleFunc("/users/{id}", getUser).Methods("GET")

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

// 수정 : 전체 user 정보 전달
func getUsers(w http.ResponseWriter, r *http.Request) {
	setJsonHeader(w) //
	HttpInfo(r)      // 호출된 정보값을 표시

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

// 추가 : 특정 user 정보 전달
func getUser(w http.ResponseWriter, r *http.Request) {
	setJsonHeader(w) //
	HttpInfo(r)      // 호출된 정보값을 표시

	// 파라미터값 체크
	params := mux.Vars(r)

	// 파라미터값 중 id값 추출
	id, _ := strconv.Atoi(params["id"])

	// 일치하는 user id를 확인
	for _, user := range users {
		if user.Id == id {
			// 일치하는 user의 데이터 표시 및 함수 종료
			json.NewEncoder(w).Encode(user)
			return
		}
	}

	// 일치하는 id가 없을 경우, blank 표시
	json.NewEncoder(w).Encode(&User{})
}

 

 

main.go 실행화면(cmd, web)
728x90
Posted by 게으른거북
:
728x90

참고영상 : Como Programar uma API REST Simples em Golang Parte 1 # 18

 

더보기

크롬 확장 프로그램 다운 - JSON Formatter (링크)

Go 서버를 통해 JSON에 대한 데이터 확인을 위해 설치가 필요합니다.

크롬 확장 프로그램 - JSON Formatter

 

프로젝트 환경 세팅

cmd 창을 실행하여 아래 코드를 실행.

 

아래 코드는

별도의 go 라이브러리를 가져온 후

Golang 프로젝트 폴더를 생성하는 코드입니다.

 

cd workspace/go/src
go get -u github.com/gorilla/mux
mkdir go_server
cd go_server

 

go_server 폴더 위치에 main.go 파일 생성 및 실행

생성하신 프로젝트 폴더 내에서 파일 생성 후, main.go 로 지정해 주세요.

 

main.go 파일 생성

 

 

main.go 코딩

생성하신 main.go 파일에 코드를 입력해 주세요.

 

package main

import (
	"encoding/json"
	"log"
	"net/http"

	//REST API 서버를 생성하기 위한 gorilla/mux 모듈
	"github.com/gorilla/mux"
)

// User 구조체 선언
type User struct {
	Id       int    `json"id"`
	Name     string `json:"name"`
	Email    string `json:"email"`
	Password string `json:"password"`
}

// user 기본 데이터 세팅
var users = []User{
	User{Id: 1, Name: "David", Email: "test@gmail.com", Password: "123"},
	User{Id: 2, Name: "Nata", Email: "test@email.com", Password: "qwer"},
}

func main() {
	r := mux.NewRouter().StrictSlash(true)

	// 핸들러 로직 작성
	// 호출에 대한 GET
	r.HandleFunc("/users", getUsers).Methods("GET")

	// 포트를 3000으로 지정
	log.Fatal(http.ListenAndServe(":3000", r))
}

// 전체 user 정보 전달
func getUsers(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(users)
}

 

json.NewEncoder(w).Encode(users)

json.NewEncoder에 표준 출력 http.ResponseWriter를 전달. 
생성된 인코더는 앞으로 입력할 데이터를 표준 출력으로 연결하는 스트림을 갖습니다. 
Encode() 로 User 값을 보내면 표준 출력에는 인코딩된 JSON 문자열이 출력됩니다.

 

w.Header().Set("Content-Type", "application/json")

ResponseWriter의 Header() 함수는 
Header를 반환하는데 Set() 메소드로 헤더 값을 지정할 수 있습니다.
Content-Type을 "application/json"으로 설정하여 JSON 응답임을 전달합니다.

 

r := mux.NewRouter().StrictSlash(true)
r.HandleFunc("/users", getUsers).Methods("GET")

Path에 따라 response 할 수 있는 API Server를 mux 모듈을 통해 구현합니다. 
r.HandleFunc의 인자로 function(getUsers)을 주면, 해당 Path(/users)로 요청이 왔을 때 function을 실행할 수 있습니다. 

 

Go 테스트

cmd를 통해 main.go를 실행하시면,

아래 이미지와 같이 cmd 결과가 표시 됩니다.

 

localhost:3000/users 에 들어가시면,

미리 입력하신 user에 대한 데이터를 확인하실수 있습니다.

 

go run main.go

 

main.go 실행화면(cmd, web)
728x90
Posted by 게으른거북
: