基于以上考虑,相同模型通过前端指定返回不同的字段是比较合理的选择
前端会很抗拒这种设计吗
1
humpy 2020-11-12 16:58:13 +08:00
那可以再去看看 graphql
|
2
wunonglin 2020-11-12 16:59:45 +08:00
后端不是有 control 和 service 吗,control 整合 service 的数据不就行了
|
3
wysnylc 2020-11-12 17:03:18 +08:00 1
字段不同就是结构不同,结构不同应当定义为不同接口
|
4
yaphets666 2020-11-12 17:06:36 +08:00
作为一个前端我是很烦这种.当然我知道有 GraphQL 这种东西. 我很好奇为什么接口不能分开呢? 通过 extends 和 Override 同时把以后可能同意修改的字段和各功能不同的字段区分开,可以解决这个问题吗?
|
5
Sapp 2020-11-12 17:08:21 +08:00
我不理解为什么要这么干,你直接多开几个接口,接口后续再按照你自己的逻辑分发不就行了吗?一个不同的业务需求开一个新的接口,这不是很正常的吗?为什么非要一个接口一把梭,另外接口返回的数据最好是固定的类型,不然前端没有 ts 加持很容易出问题。
|
6
yaphets666 2020-11-12 17:08:22 +08:00
我不懂 JAVA 啊,这是不是有 SQL 注入的风险?
|
7
a398058068 2020-11-12 17:11:53 +08:00
GraphQL
|
8
love 2020-11-12 18:10:54 +08:00
很合理的做法,在哪篇讲 rest 文章里我记得也是标准做法
|
9
nekochyan 2020-11-12 18:22:19 +08:00
很抗拒,基本都是不同结构就用不同接口
|
10
misaka19000 2020-11-12 18:26:50 +08:00
「会出现很多相同模型不一样的 api 」这是什么意思?
|
11
beginor 2020-11-12 19:02:37 +08:00 via Android
这个很合理吧,我们提供的的通用 API, 都是前端指定输出字段, 指定过滤条件。 服务端只要配置数据表就行了, 大家合作好开心
|
12
beginor 2020-11-12 19:04:57 +08:00 via Android
不服的话可以参考 GraphQL 以及 OData , 还有 elastic
|
13
Kobayashi 2020-11-12 19:12:41 +08:00 via Android
GraphQL?
|
14
shunia 2020-11-12 19:20:46 +08:00
只能说适应了以后就挺香:
1. 接口其实是变快了,因为相当于 batch,后台服务针对单个需求消耗的时间肯定是远小于创建 http 连接并等待返回的时间的; 2. 后端接口会因此变得纯粹,更加弱业务化,很适合当前大前端 setState 这种风格的开发模式; 3. 前端代码也会因此从设计上更加模块化,做好合理的数据拆解后,分别 dispatch 到不同的模块里很奈斯; |
15
xuanbg 2020-11-12 19:23:39 +08:00
多几个接口不是坏事,永远不要试图把不同需求的接口合并成一个。
|
16
jasl 2020-11-13 02:09:36 +08:00
|
17
Gleven 2020-11-13 09:26:22 +08:00
建议试试 graphql,完美解决楼主提出的问题
|
18
goodboy95 2020-11-13 10:09:22 +08:00
@yaphets666 sql 注入倒不用担心,可以在后端搞一个字段白名单,白名单之外的不给
|
19
Elroooo0Y 2020-11-13 10:58:37 +08:00
不同的场景让前端传不同的场景 id
后台对不同的场景配置不同的查询数据策略 |
20
aguesuka 2020-11-13 13:09:24 +08:00 via Android
假如你的接口是一个函数,你的想法就是给这个函数加上一个泛型参数。如果对类型系统没有深刻的理解的话,业务的复杂程度越高,这个接口成为一坨的几率也越高。
不过如果你是程序语言专家,自信可以精通自己写的 dsl,或者接口足够简单。完全可以放飞自我。 |
21
oliver2bao 2020-11-17 08:59:03 +08:00
先回答题主的三个问题
- 接口可分为公共接口,和页面独有的接口。比如授权,用户信息这些就是公共接口 - 用一个接口通过修改参数的方式返回所有数据显然是不合理的,这样需要在一个 controller 里面大量的 router 应该做的事,既然这样为什么让 router 做 router 的事,为什么还要手动实现一个 router 的判断呢? - 同一个接口也可以返回类似的数据的,可以通过前端传递不同的参数来决定是否返回某些数据。另外建议可以系统了解下 restful api 的设计,阮一峰的博客就有。 其实我说的这些就是二楼 @wunonglin 说的,以 egg.js 框架的逻辑来说。 一个请求进来,先经过 router 筛选,选择正确的 controller 入口,进入之前,先经过 middleware 的处理。一般来说 router 和 controller 是一对一的关系,当然也能写成多个 router 对于一个 controller,但是那样没任何一样。 在 controller 中调用多个 service 来处理,有些 service 会调用 model,有些却不用。后端不应该直接把 model 直接暴露给前端调用的,毕竟不是什么数据都可以直接无限制的暴露出去。 |