api 数据返回过滤不需要的字段

2020-05-17 12:41:15 +08:00
 Wenco

目前在用 gin+gorm 写一个小玩意,遇到这样的情况:

为了代码复用及写起来方便,基本都是用的 orm select *

有时候面向前台的接口不方便展示数据集中的某个字段,但是面向后端的又需要

这应该是前后端分离都会遇到的吧,请教各位大佬,比较好的解决方案是什么?

6941 次点击
所在节点    Go 编程语言
44 条回复
hq
2020-05-17 12:46:31 +08:00
heimeil
2020-05-17 12:53:55 +08:00
type User struct {
Name string `json:"name"`
Password string `json:"-"`
}
Wenco
2020-05-17 13:00:10 +08:00
@hq 感谢,目前用的 restful api,我了解一下
Wenco
2020-05-17 13:00:46 +08:00
@heimeil 重写一个结构体,然后将查询出来的 model 数据转移吗。
kasper4649
2020-05-17 13:16:16 +08:00
DTO ?
pubby
2020-05-17 13:26:42 +08:00
var u User =.....

//举例:隐藏 User 里的 password

var out = struct{
User
Hide1 bool `json:"password,omitempty"`
}{
User: u,
}

json.Marshal(out)

//原理:利用 omitempty 属性的空值同名字段覆盖
CEBBCAT
2020-05-17 13:48:38 +08:00
这个 Google 一下就有了吧。可以重新定义结构体的 JSON 相关方法
qiayue
2020-05-17 15:41:24 +08:00
后端处理后再返回,每一个字段都要处理,确保返回的数字是数字,字符是字符。
另外很多时候还会返回对象,举例帖子详情接口,返回的 author 就需要是一个对象,方便展示昵称和头像
{
"id": 123,
"title": "帖子标题",
"author":{
"id": 456,
"name": "帖子作者昵称",
"avatar": "帖子作者头像 URL"
}
}
Wenco
2020-05-17 16:29:37 +08:00
@CEBBCAT 提问前 google 过,看你的描述应该说的和我看的那个一样,我感觉不太灵活。
Wenco
2020-05-17 16:32:32 +08:00
@pubby 嗯,感觉这个挺好的
JackyCDK
2020-05-17 18:22:15 +08:00
json: - , binding: password,required
renmu
2020-05-17 18:25:34 +08:00
都是 select * 会被骂的吧😂😂性能有问题
securityCoding
2020-05-17 19:55:33 +08:00
@renmu 表设计好,索引用好并不会有什么问题...
GM
2020-05-17 23:03:40 +08:00
很简单,换 PHP 就好了!(* ̄ rǒ ̄)
winrar
2020-05-18 01:21:44 +08:00
这个 ORM 都有的吧,比如 django 的 values(fields, *expressions)
winrar
2020-05-18 01:26:32 +08:00
@winrar 看错了,此条无视
ppphp
2020-05-18 02:04:26 +08:00
我的实践上还是返回的 model 和数据表的 model 会转一下,方便点,改表也没有心理压力
baobao1270
2020-05-18 05:04:11 +08:00
.NET 有 DTO,其他语言应该也有类似的,思路就是用中间类转换一下
k9982874
2020-05-18 07:31:14 +08:00
先不说 select *的问题,你是把数据直接怼进 map 里?
Counter
2020-05-18 07:35:14 +08:00
创建一个专门用于输出数据的类,不要直接输出实体

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/672543

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX