我正在 golang 中制作一个 REST API,我想添加对过滤字段的支持,但我不知道实现它的最佳方法,假设我有这个表示Album模型的结构
type Album struct {
ID uint64 `json:"id"`
User uint64 `json:"user"`
Name string `json:"name"`
CreatedDate time.Time `json:"createdDate"`
Privacy string `json:"privacy"`
Stars int `json:"stars"`
PicturesCount int `json:"picturesCount"`
}
和一个返回一个实例的函数 Album
func GetOne(id uint64, user uint64) (Album, error) {
var album Album
sql := `SELECT * FROM "album" WHERE "id" = $1 AND "user" = $2;`
err := models.DB.QueryRow(sql, id, user).Scan(
&album.ID,
&album.User,
&album.Name,
&album.CreatedDate,
&album.Privacy,
&album.Stars,
&album.PicturesCount,
)
return album, err
}
客户要发出这样的请求
https://api.localhost.com/albums/1/?fields=id,name,privacy
抛开明显的安全问题不谈,我的第一个想法是使用类似这样的方法过滤数据库中的字段
func GetOne(id uint64, user uint64, fields string) {
var album Album
sql := fmt.Sprintf(`SELECT %s FROM "album" WHERE "id" = $1 AND "user" = $2;`, fields)
// i don't know what to do after this
}
然后我想omitempty在所有字段中添加标签并将字段设置为零值,然后再将其编码为 JSON,
这行得通吗?
哪个是更好的方法?
有没有最好的方法?
我将如何实施第一种方法?
谢谢你。
蓝山帝景
郎朗坤
随时随地看视频慕课网APP
相关分类