使用GO纤维和行星尺度构建REST API-第4部分
#api #go #planetscale

更新用户

再次,在用户处理程序中添加一个名为UpdateUser的新功能。

func UpdateUser(c *fiber.Ctx) error {
    // first, check if the user is exist
    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!",
        })
    }

    // second, parse the request body
    request := &updateUserRequest{}
    if err := c.BodyParser(request); err != nil {
        return c.Status(http.StatusBadRequest).JSON(&fiber.Map{
            "message": err.Error(),
        })
    }

    // third, update the user
    updateUser := models.User{
        Name:    request.Name,
        Email:   request.Email,
        Website: request.Website,
    }
    models.DB.Model(&user).Updates(&updateUser)

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

注册更新用户到main.go

app.Put("/users/:id", handlers.UpdateUser)

现在,重新运行应用程序。更新我们之前创建的用户。

$ curl --location --request PUT 'http://localhost:3000/users/1' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Machine name"
}'

响应

{
  "user": {
    "ID": 1,
    "CreatedAt": "2021-09-08T08:07:25.042+07:00",
    "UpdatedAt": "2021-09-08T08:15:52.249+07:00",
    "DeletedAt": null,
    "name": "Machine name",
    "email": "joh@example.com",
    "website": "google.com"
  }
}

当用户不存在时

$ curl --location --request PUT 'http://localhost:3000/users/100' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Machine name"
}'

响应

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

删除用户

在用户处理程序的底部添加删除用户功能。

func DeleteUser(c *fiber.Ctx) error {
    // first, check if the user is exist
    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!",
        })
    }

    // second, delete the user
    models.DB.Delete(&user)

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

注册功能

app.Delete("/users/:id", handlers.DeleteUser)

所以,再次创建新用户

$ curl --location --request POST 'http://localhost:3000/users' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Badu",
    "email": "joh@example.com",
    "website": "google.com"
}'

请参阅响应中的ID,我们将删除该用户

$ curl --location --request DELETE 'http://localhost:3000/users/2'

响应

{
  "message": "Success"
}

概括

Planetscale提供开发人员计划定价,您可以将其用于开发生命周期,并且是完全免费的。您可以为每个数据库创建最多3个数据库和3个分支。基本上,对于从不使用无服务器数据库并使用新工作流程如何制作架构的开发人员来说,这将是新知识。

光纤是一个很好的网络框架,可以在GO中构建应用程序,它们很快,具有丰富的功能,并且文档很好。

这篇文章,这只是一个简单的Web API应用程序,可以对如何使用光纤和行星数据库进行基本了解。在下一个中,我们将使用相同的技术堆栈构建一个更复杂的Web API。

下载此repository上的完整源代码。

谢谢。