ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RaspberryPi로 Golang 서버만들기 - 회원관리 하기 (3) [6]
    Go 2021. 1. 6. 23:21
    728x90
    반응형

    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
    반응형

    댓글

Designed by Tistory.