首页 > 解决方案 > 如何在 Go 中为 MySQL 构建 RESTful API?

问题描述

我的任务是将 JSON 有效负载插入表中。

(固定)SQL 表结构定义如下:

$ echo "describe ut_invitation_api_data\G;" | mysql -h auroradb.dev.unee-t.com -P 3306 -u bugzilla --password=$(aws --profile uneet-dev ssm get-parameters --names MYSQL_PASSWORD --with-decryption --query Parameters[0].Value --output text) bugzilla  | grep Field
mysql: [Warning] Using a password on the command line interface can be insecure.
  Field: id
  Field: mefe_invitation_id
  Field: bzfe_invitor_user_id
  Field: bz_user_id
  Field: user_role_type_id
  Field: is_occupant
  Field: bz_case_id
  Field: bz_unit_id
  Field: invitation_type
  Field: is_mefe_only_user
  Field: user_more
  Field: mefe_invitor_user_id
  Field: processed_datetime
  Field: script
  Field: api_post_datetime

有关显示不同类型以及它们是否可以为空的详细信息,请参见fields.txt 。

所以我的第一步是创建一个结构并将 varchar 映射到字符串,将任何类型的 int 映射到 int 并将日期映射到 time.Time。

带有下划线的列名已经让我的 Golang 编辑器抱怨了。接下来是 JSON 标签,我们有类似的东西:

type invitation struct {
    id                   int       `json:"id"`
    mefe_invitation_id   string    `json:"mefe___invitation___id"`
    bzfe_invitor_user_id int       `json:"bzfe___invitor___user___id"`
    bz_user_id           int       `json:"bz___user___id"`
    user_role_type_id    int       `json:"user___role___type___id"`
    is_occupant          bool      `json:"is___occupant"`
    bz_case_id           int       `json:"bz___case___id"`
    bz_unit_id           int       `json:"bz___unit___id"`
    invitation_type      string    `json:"invitation___type"`
    is_mefe_only_user    bool      `json:"is___mefe___only___user"`
    user_more            string    `json:"user___more"`
    mefe_invitor_user_id int       `json:"mefe___invitor___user___id"`
    processed_datetime   time.Time `json:"processed___datetime"`
    script               string    `json:"script"`
    api_post_datetime    time.Time `json:"api___post___datetime"`
}

这看起来非常错误。有没有更好的方法来使用 Golang 为 mysql 数据库制作 RESTful API?即确保使用干净的映射和正确的 RESTful 动词?

标签: mysqlrestgo

解决方案


mysql 字段名称必须放在json标签中。结构中的字段名称可以是您喜欢的任何名称。例如:

type Invitation struct {
    ID                int    `json:"id"`
    InvitationID      string `json:"mefe_invitation_id"`
    InvitorUserID     int    `json:"bzfe_invitor_user_id"`
    BzUserID          int    `json:"bz_user_id"`
    //...
}

另请注意,为了让json包能够看到您的结构字段,它们需要被导出(以大写字母开头),您可能还想导出整个结构,因此您可以在公共函数中返回它。


推荐阅读