后端要求前端传的查询参数

2020-04-17 14:39:12 +08:00
 zycojamie

比如,你输入一个手机号,进行查询,要把你手机号的值,查询是 like 还是=,数据是 string 还是 int,模糊还是精准查询,全部前端拼给后端。。。

这种方案可行吗。。。

8014 次点击
所在节点    程序员
79 条回复
hooopo
2020-04-17 21:56:44 +08:00
graphql 了解一下
puilu
2020-04-18 00:19:07 +08:00
这届后端不行
hq136234303
2020-04-18 00:19:35 +08:00
@zycojamie 你们架构师真的可爱。如果是前端加密做的话 终有一天解开 sql 注入 会爽的飞起的。。。。
a1562619919
2020-04-18 02:42:38 +08:00
数据量极小的模糊查询前端做,比如手机登录帐号。但数据多到超过几十个了明显前端不该处理,或者涉及业务的数据尽量不让前端处理,前端可以模糊查询一下个人非业务的缓存数据(个人姓名手机号这种)
icy37785
2020-04-18 03:15:25 +08:00
GraphQL + 10086
bllue
2020-04-18 05:43:48 +08:00
架构师应该拎得清
只要避免前端拼接后端拿来直接用的情况
Jrue0011
2020-04-18 06:56:02 +08:00
@zycojamie 这种设计感觉和 DSL 有点像,elastic search 的查询 api 就是类似的设计
yufeng0681
2020-04-18 08:11:26 +08:00
我能想到 前端能拒绝的理由:
如果有三个终端 需要使用这个功能。 三个终端的开发都要懂 SQL,都要完整测试,不合理,也浪费成本。
SyncWorld
2020-04-18 08:41:53 +08:00
直接传 SQL 岂不是美包包~
qce7
2020-04-18 08:59:21 +08:00
我们这边用 Yii2 的 DSL


// 过滤条件
// 过滤条件按需使用,没有过滤条件就不传 filter
"filter": {
// and 表示 "且",也支持 or,但是实际业务用的比较少而且性能不佳 or 不建议使用
"and": [
// like 条件
{"mobile": {"like": "1"}},
// level = 1
{"level": 1},
// 范围条件 id in [2, 5, 9]
{"id": {"in": [2, 5, 9]}},
// createdAt > 0
{"createdAt": {"gt":0}},
// createdAt < 10000000000
{"createdAt": {"lt":10000000000}}
]
}
// 每页记录数,后端默认 10 条
"perPage": 10,
// 请求页数
"page": 1,
// 排序值,优先级从前到后“-”表示倒序
"sort": "-isDefault,-isCertified,-id"
}
SjwNo1
2020-04-18 09:48:36 +08:00
graphql 吧,sql 不安全不太好
michaelcheng
2020-04-18 09:53:11 +08:00
复杂的查询传参还是可以的,不一定是要 sql ,语义化的传参,约定参数类型、运算符、值约束等
a852695
2020-04-18 09:59:56 +08:00
如果是直接传 sql 不可,但是玩着玩着就变成了直接传 sql,不信试试看?后端尝到了甜头。
如果是拼约定字符串可以,玩着玩着,自己都不知道约定了啥。
onfuns
2020-04-18 10:16:11 +08:00
可行,不过这种方案都是用在内网的系统,可以减少很多的工作量。外网的应用还是应该规规矩矩的,现在的安全可是很敏感了。
royzxq
2020-04-18 12:58:07 +08:00
这不就是传说中 apiJSON 的场景吗, 让你们后端用啊(
pap3r
2020-04-20 13:12:53 +08:00
@masker 后端儿子连数据类型都要前端传 怎么优越了? 你就是后端儿子吧
masker
2020-04-20 13:35:07 +08:00
@pap3r 说实话挺可怜你们这种伪物理阉割的太监的呀。。。自己生育功能不行,还喜欢到处叫别人儿子。。
pap3r
2020-05-16 00:16:08 +08:00
@masker 说实话没父母的孤儿 有人叫你声儿子 你就认了吧
pap3r
2020-05-16 00:18:42 +08:00
@masker 自动抬杠怪物 人身攻击 好恶心 生活肯定过得很凄惨

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

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

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

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

© 2021 V2EX