Go Fiber 및 PlanetScale로 REST API 구축 - 3부

17962 단어 goapi

스키마 배포



이제 add-users-table 분기를 main 분기에 배포할 차례입니다.

$ pscale deploy-request create fiber-pscale add-users-table
Deploy request #1 successfully created.


이제 대시보드를 확인하면 여기에서 개발 분기에서 기본 분기로 스키마 변경을 요청한 것을 볼 수 있습니다. Git에 익숙하다면 Pull Request와 비슷합니다.



이제 요청을 승인하면 PlanetScale이 다운타임 없이 새 스키마를 기본 브랜치에 자동으로 적용합니다.

$ pscale deploy-request deploy fiber-pscale 1
Successfully deployed dhacze78ukhv from add-users-table to main.


이제 돌아가서 대시보드를 확인하세요. 배포되었습니다!🎊



더 이상 분기에서 스키마를 변경할 필요가 없으면 이제 안전하게 삭제할 수 있습니다.

$ pscale branch delete fiber-pscale add-users-table


핸들러


users.go 디렉토리 내에 handlers라는 파일을 만듭니다. 이제 응용 프로그램이 데이터베이스와 통신할 수 있도록 기본 분기에 대한 연결을 만듭니다.

$ pscale connect fiber-pscale main --port 3309


Note: It's recommended to use a secure connection while connecting to the main branch once you deployed your application. More https://docs.planetscale.com/reference/secure-connections



사용자 만들기



함수 CreateUser를 만들고 createUserRequest에서 users.go 구조체를 초기화합니다.

package handlers

import (
    "net/http"

    "github.com/gofiber/fiber/v2"
    "github.com/maful/fiber-pscale/models"
)

type createUserRequest struct {
    Name    string `json:"name" binding:"required"`
    Email   string `json:"email" binding:"required"`
    Website string `json:"website" binding:"required"`
}

func CreateUser(c *fiber.Ctx) error {
    req := &createUserRequest{}
    if err := c.BodyParser(req); err != nil {
        return c.Status(http.StatusBadRequest).JSON(&fiber.Map{
            "message": err.Error(),
        })
    }
    user := models.User{
        Name:    req.Name,
        Email:   req.Email,
        Website: req.Website,
    }
    models.DB.Create(&user)
    return c.Status(fiber.StatusCreated).JSON(&fiber.Map{
        "user": user,
    })
}


열기main.go , 해당 함수를 호출하는 새 처리기를 추가합니다.

import (
    // ...
    "github.com/maful/fiber-pscale/handlers"
)

// app.Get("/" ...
app.Post("/users", handlers.CreateUser)


앱을 실행하고 사용자 생성을 시도합니다.

$ curl --location --request POST 'http://localhost:3000/users' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "John",
    "email": "[email protected]",
    "website": "https://example.com"
}'


응답

{
  "user": {
    "ID": 1,
    "CreatedAt": "2021-09-06T20:04:31.022+07:00",
    "UpdatedAt": "2021-09-06T20:04:31.022+07:00",
    "DeletedAt": null,
    "name": "John",
    "email": "[email protected]",
    "website": "https://example.com"
  }
}


모든 사용자 나열



create 함수 아래에 GetUsers라는 새 함수를 만듭니다.

func GetUsers(c *fiber.Ctx) error {
    var users []models.User
    models.DB.Find(&users)

    return c.Status(http.StatusOK).JSON(&fiber.Map{
        "users": users,
    })
}


함수를 앱에 등록하고 사용자 생성 핸들러 위에 배치합니다.

app.Get("/users", handlers.GetUsers)
// app.Post("/users...


기존 앱을 중지하고 다시 실행하십시오. 변경 시 앱이 자동으로 새로고침되지 않으므로 항상 이렇게 해야 합니다.

curl --location --request GET 'http://localhost:3000/users'


응답

{
  "users": [
    {
      "ID": 1,
      "CreatedAt": "2021-09-06T20:04:31.022+07:00",
      "UpdatedAt": "2021-09-06T20:04:31.022+07:00",
      "DeletedAt": null,
      "name": "John",
      "email": "[email protected]",
      "website": "https://example.com"
    }
  ]
}


사용자 보기



하단에 GetUser라는 새로운 함수를 추가합니다.

func GetUser(c *fiber.Ctx) error {
    var user models.User
    if err := models.DB.First(&user, "id = ?", c.Params("id")).Error; err != nil {
        return c.Status(http.StatusNotFound).JSON(&fiber.Map{
            "message": "Record not found!",
        })
    }

    return c.Status(http.StatusOK).JSON(&fiber.Map{
        "user": user,
    })
}


main.go에 새 처리기를 추가합니다.

// ...
app.Get("/users", handlers.GetUsers)
app.Get("/users/:id", handlers.GetUser) // new


이제 ID가 1인 사용자 세부 정보를 가져오려고 합니다.

curl --location --request GET 'http://localhost:3000/users/1'


응답

{
  "user": {
    "ID": 1,
    "CreatedAt": "2021-09-06T20:04:31.022+07:00",
    "UpdatedAt": "2021-09-06T20:04:31.022+07:00",
    "DeletedAt": null,
    "name": "John",
    "email": "[email protected]",
    "website": "https://example.com"
  }
}


존재하지 않는 아이디를 얻으려고 하면

curl --location --request GET 'http://localhost:3000/users/100'



{
  "message": "Record not found!"
}

좋은 웹페이지 즐겨찾기