-
RaspberryPi로 Golang 서버만들기 - 회원관리 하기 (3) [6]Go 2021. 1. 6. 23:21728x90반응형
1. API 연결
//현재 패키지를 설정한다. main은 func main()이 있어야한다. package main //필요한 패키지를 import한다. import ( "fmt" "net/http" _ "github.com/go-sql-driver/mysql" "github.com/labstack/echo/v4" "myserver.com/user" ) func main() { //echo 생성 e := echo.New() // '/'로 GET으로 요청이 왔을때 응답을 설정한다.\ //user생성 API e.PUT("/user", func(c echo.Context) error { u := new(user.User) var err error err = c.Bind(u) fmt.Println(u) if err != nil { return proccessError(&c, err) } //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. err = user.CreateUser(u) if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.String(http.StatusOK, "user created") }) //user수정 API e.PATCH("/user", func(c echo.Context) error { id := c.QueryParam("id") u := new(user.User) var err error err = c.Bind(u) fmt.Println(u) if err != nil { return proccessError(&c, err) } //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. err = user.UpdateUser(id, u) if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.String(http.StatusOK, "user created") }) //user삭제 API e.DELETE("/user", func(c echo.Context) error { id := c.QueryParam("id") var err error //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. err = user.DeleteUser(id) if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.String(http.StatusOK, "user created") }) //user 전체 조회 API e.GET("/users", func(c echo.Context) error { var err error //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. result, err := user.SelectUserList() if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.JSON(http.StatusOK, result) }) //user조회 API e.GET("/user", func(c echo.Context) error { id := c.QueryParam("id") var err error //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. result, err := user.SelectUser(id) if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.JSON(http.StatusOK, result) }) //echo를 실행시키고, 서버가 종료됬을때 Logger를 설정한다. e.Logger.Fatal(e.Start(":1323")) } func proccessError(c *echo.Context, err error) error { return (*c).String(http.StatusInternalServerError, err.Error()) }
만들었던 함수들을 바탕으로 Request마다 필요한 함수를 연결했습니다.
User 생성부분입니다.
//user생성 API e.PUT("/user", func(c echo.Context) error { u := new(user.User) var err error err = c.Bind(u) fmt.Println(u) if err != nil { return proccessError(&c, err) } //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. err = user.CreateUser(u) if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.String(http.StatusOK, "user created") })
e.PUT으로 Method가 PUT일때 함수를 정의할 수 있습니다.
"/user"는 서버로 들어올 uri를 의미합니다.
먼저 user를 객체를 만들어 request에 있는 json을 객체로 bind한다.
Database, Table을 생성하고,
User를 생성합니다.
User 수정 부분입니다.
//user수정 API e.PATCH("/user", func(c echo.Context) error { id := c.QueryParam("id") u := new(user.User) var err error err = c.Bind(u) fmt.Println(u) if err != nil { return proccessError(&c, err) } //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. err = user.UpdateUser(id, u) if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.String(http.StatusOK, "user created") })
User 삭제 부분입니다.
//user삭제 API e.DELETE("/user", func(c echo.Context) error { id := c.QueryParam("id") var err error //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. err = user.DeleteUser(id) if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.String(http.StatusOK, "user created") })
User 전체 조회 부분입니다.
//user 전체 조회 API e.GET("/users", func(c echo.Context) error { var err error //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. result, err := user.SelectUserList() if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.JSON(http.StatusOK, result) })
User를 ID로 조회하는 부분입니다.
//user조회 API e.GET("/user", func(c echo.Context) error { id := c.QueryParam("id") var err error //DB가 없으면 생성한다. err = user.CreateDatabase() if err != nil { return proccessError(&c, err) } //TABLE이 없으면 생성한다. err = user.CreateTable() if err != nil { return proccessError(&c, err) } //User를 생성한다. result, err := user.SelectUser(id) if err != nil { return proccessError(&c, err) } //Response를 보낸다. return c.JSON(http.StatusOK, result) })
2. Postman 테스트
{ "info": { "_postman_id": "d0479fba-353f-45d7-8185-ec03f392a78b", "name": "RaspberryServer", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ { "name": "http://192.168.0.100:1323/user", "request": { "method": "PUT", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"id\": \"test\",\r\n \"password\": \"test2\",\r\n \"email\": \"test3\",\r\n \"phone\": \"test4\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "http://192.168.0.100:1323/user", "protocol": "http", "host": [ "192", "168", "0", "100" ], "port": "1323", "path": [ "user" ] } }, "response": [] }, { "name": "http://192.168.0.100:1323/user?id=test", "request": { "method": "PATCH", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"id\": \"utest\",\r\n \"password\": \"utest2\",\r\n \"email\": \"utest3\",\r\n \"phone\": \"utest4\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "http://192.168.0.100:1323/user?id=test", "protocol": "http", "host": [ "192", "168", "0", "100" ], "port": "1323", "path": [ "user" ], "query": [ { "key": "id", "value": "test" } ] } }, "response": [] }, { "name": "http://192.168.0.100:1323/user?id=utest", "request": { "method": "DELETE", "header": [], "url": { "raw": "http://192.168.0.100:1323/user?id=utest", "protocol": "http", "host": [ "192", "168", "0", "100" ], "port": "1323", "path": [ "user" ], "query": [ { "key": "id", "value": "utest" } ] } }, "response": [] }, { "name": "http://192.168.0.100:1323/user", "request": { "method": "GET", "header": [], "url": { "raw": "http://192.168.0.100:1323/user", "protocol": "http", "host": [ "192", "168", "0", "100" ], "port": "1323", "path": [ "user" ] } }, "response": [] }, { "name": "http://192.168.0.100:1323/user?id=test", "request": { "method": "GET", "header": [], "url": { "raw": "http://192.168.0.100:1323/user?id=test", "protocol": "http", "host": [ "192", "168", "0", "100" ], "port": "1323", "path": [ "user" ], "query": [ { "key": "id", "value": "test" } ] } }, "response": [] } ] }
728x90반응형'Go' 카테고리의 다른 글
Golang - ORM(2) [8] (1) 2021.02.08 Golang - ORM(1) [7] (0) 2021.02.07 RaspberryPi로 Golang 서버만들기 - 회원관리 하기 (2) [6] (0) 2021.01.06 RaspberryPi로 Golang 서버만들기 - 회원관리 하기(1) [6] (0) 2021.01.06 RaspberryPi로 Golang 서버만들기 - MariaDB 설치하기 [6] (0) 2021.01.03