第二条,个人觉得统一比较好,即使影响不大,但一会这,一会那的,写代码时的“注意”成本高(写接口时要去判断是用前者好还是后者好,用接口时要去看接口是前者那样用还是后者那样用)。。。
第三条,个人觉得前提是否具有兼容性问题,如果是有,当然兼容性是必须优先考虑的,不过兼容性可能要看改动影响的范围,如果影响较小,后端在原有基础上做兼容改动没啥问题,但如果改动较大,需要从版本上去做兼容,个人觉得此时前后端都得改,而不是某一方硬适配。当然如果没有兼容问题,建议怎么改,对主要的指标(性能,设计合理性,扩展性等)比较好就怎么来,无论谁需要改动。
PS: 哈哈,这里主要是最近一些经历,比如遇到一个问题需要改动时,同事总会说,这样前端需要改动之类的,让我尽量的去适配前端,让我怀疑是我的工作经历不足导致我认知不足,还是同事太顾着前端了😂,希望大家也留下平时前后端配合遇到的一些问题及解决方案,另外这里不是想挑起前后端对立,只是为了更好的认识问题及解决问题,大家尽管批评指正,谢谢大家回复!
另外一个问题: 大家接口响应是怎么样的,我看过这样的:
1.只用了基本的http code,用来判断网络或资源情况(比如2xx,3xx,4xx ,5xx等),业务的请求结果用响应的code表示(无论是否正常响应),比如:
{
"code" : 200,
"msg" : "success",
"data" : {}
}
{
"code" : 404,
"msg" : "not found",
"data" : {}
}
2.使用http code+data object和 error object的形式:
{
data: {},
info: {},
messages: []
}
{
"requestId": xxxxx,
"status": 4xx,
"message": "invalid xxx"
}
贴下谷歌云的接口谷歌云接口
1
GooMS 2023-11-13 04:59:18 +08:00 via Android
1. Int, 字典
2. get query |
2
yigecaiji 2023-11-13 08:07:17 +08:00 via Android 10
我是前端,所以让后端改
|
3
fox0001 2023-11-13 08:14:45 +08:00 via Android
我的意见
1. 后端返回 int 。至于前端显示什么,怎么显示,后端不应该涉及 2. 如果接口不是用 json ,只能前后端商量,确定穿什么。如果用 post+raw ,最好是有清晰的文档。不推荐 get+请求参数。 3. 遇到需求/bug ,当然是根据实际去处理。我们一般是后端处理业务逻辑,前端处理显示和 UI 逻辑。 |
4
qping 2023-11-13 08:17:00 +08:00
1. 一般都是像一楼一样 int + 字典,减少网络传输的时间消耗更重要,int 传输的数据更少,速度更快。现在的浏览器和服务器增加个判断完全不是事情。
2. 这应该有统一的约定,合理的是 get,post,delete 都用上,但也有公司之前都是统一用 post ,那和约定保持统一是合理的 3. 前端应该是展示层,负责将数据渲染成界面,后端负责安全/校验/数据加载,运算,保存等等。 具体问题具体分析 我还是想说前后端不用卡的这么死,后端也需要学习前端的知识,前端也需要学习后端的知识。 但 jsp 那个年代,前端只是写写静态 html ,后端什么都做,现在前后分离,职责是单一了,但是更像是流水线工人,对于个人的成长是极为不利的。 |
5
jazzg62 2023-11-13 08:22:33 +08:00
我是前端,我直接改。除非领导要求后端改,或者前端改不了。
|
6
jucelin 2023-11-13 08:33:22 +08:00
1. 两个都返回,怎么显示前端自己决定;以后显示内容有小变化,后端一改就行;
2. 统一用 POST 最佳,前后端不用协商了; 3. 理论上后端要少改,后端会向多种前端提供数据,影响面比较大。 |
7
darkengine 2023-11-13 08:45:03 +08:00 1
3, 结果单一,如果需求改动,接口得增加返回更多得新需求数据,不能复用
----------- 如果你们有 app 端,这条刚好相反。如果 app 直接显示接口返回的字符串,如果需求改了(例如需要加个状态改变时间这种), 接口修改 app 不用发版。 不过这只是个例子,最终前端还是后端改得看具体的需求。 |
8
daydreamcafe 2023-11-13 08:48:33 +08:00 1
如果只是一条链路 后端->前端 ,那么哪边修改都能达到业务要求,无所谓。但是我想说后端没必要那样觉得所谓性能之类的不想修改,因为通常有些场景一些接口是要多端共用的,如果 web 、app 都依赖同一个接口,那么是不是要前端的开发修改 2 遍,能在后端确定的事情为什么要在前端修改
|
9
lsk569937453 2023-11-13 08:48:38 +08:00
1.返回 int
2.查询直接 get 就行啊 |
10
darkengine 2023-11-13 08:51:26 +08:00
@daydreamcafe 是的,我们之前赶鸭子上架的项目也是这样,接口怼原始数据回来,web/Android/iOS 都要对数据处理一遍才能用于展示
|
11
Selenium39 2023-11-13 08:55:23 +08:00
谁拿钱多谁改
|
12
cxshun 2023-11-13 08:58:13 +08:00
1. 如果是服务端之间对接,我的建议是直接用枚举,也就是字符串的方式,方式大家理解。如果是前端,那我建议是 Int 值,增加映射关系就好了。
2. 尽量遵循 RESTFUL ,新增用 POST ,修改用 PUT ,其他用 GET 3. 如果可能,尽量让后端接口保持原子性,前端来组合。所以,如果一个需求改动,前端可以通过组合来实现的,尽量前端来;如果不行,就服务端配合。 |
13
8355 2023-11-13 09:17:32 +08:00
|
14
vyronlee 2023-11-13 09:19:38 +08:00
理论很完美,但实际情况基本都是:话语权小的一方改。
|
15
LLaMA2 2023-11-13 09:26:06 +08:00
我来讲点道理,
如果是网页这种的,前端动一下吧. 如果是 APP 这种还要走正规上架流程的,后端改一下也无妨。 还有,返回什么格式要始终遵循一样的规则,尽可能,谁都不能说那天没出什么差错。 友好协商,积极合作,共创共赢! |
16
skwyl 2023-11-13 09:33:48 +08:00
同 1 楼
int + 字典 后台定义好字典给前端加载缓存就行 |
17
wu67 2023-11-13 09:35:39 +08:00
返回原始状态(存数据表里面那个), 映射关系写文档.
统一 post. 遇到过不负责任的家伙, 写文档完全复制, post get 不改, 导致每个接口是什么方式都要猜, 那不如干脆直接 post 算了, 还分什么 get put delete |
18
doanything 2023-11-13 09:37:51 +08:00
基本上都后端搞。别说让前端搞。让前端改他就说只负责渲染。一顿拉扯还不如直接自己改了。
|
19
asmoker 2023-11-13 09:38:10 +08:00 via Android
问题②,有时候 b 端系统,查询条件很复杂,使用 get 方法单纯 kv 很难实现查询条件。get 传 body 也有坑,服务端有些框架直接把 get 请求的 body 擦掉了,默认拿不到。看阿里云有一个实现就是 get 方法 params=json 字符串这样,符合 get 语义,但是感觉怪怪的。post 不合语义,但是相对来说实现较简单。
|
20
ben1024 2023-11-13 09:47:02 +08:00
后端改,重心放在后端才能踢走前端
|
22
mcluyu 2023-11-13 10:16:58 +08:00
不知道你说的前端包不包含客户端,就第一条来说,这个字符串需要前端显示的话最好是直接返回, 除非这个显示不会改动不会增加。
因为客户端升级成本还是挺高的,APP 要审核通过才能上线,上线还要用户升级才能生效,增加修改了一种状态后旧版本 APP 就不能正确显示了。 另外可以抓包一些常见 APP 看看, 就拿京东来说, 它的接口返回的东西真是超乎想象的多,甚至一些按钮的 title 都是接口返回的,真就前端只负责渲染那种。 |
23
dw2693734d 2023-11-13 11:00:22 +08:00
我是后端,前端改!
|
24
RoccoShi 2023-11-13 11:03:58 +08:00
我是前端, 后端改!
|
25
bojackhorseman 2023-11-13 11:16:11 +08:00
状态值的话一般都是枚举 int 型吧
|
26
alittlehj 2023-11-13 11:24:40 +08:00
@doanything 是呀 我们公司前端都是妹子,经常就这样的问题跑你座位上跟你叽里呱啦说一堆 说什么这个我们前端不改 你们接口返回给我,我们不接受什么的,然后你想尝试说服她们的时候 你会发现磨破嘴皮子也没用。。。有这个时间不管是前端后端都早就改完了。。。。造成现在的后果是基本上后端接口能做的都是后端做了,现在等同于把饭嚼好喂她们嘴里
|
27
bthulu 2023-11-13 11:25:26 +08:00
前端不改, 后端也不改, 中台改就行了
|
28
aababc 2023-11-13 11:52:57 +08:00
我们的规则就是,如果是需要发版本的就让后端多干活,尽量让前端保持简单,容易修改。如果是不需要发版的就相对宽松一些,但也遵守前端尽量只负责展示,而不处理过于复杂的逻辑。
|
30
awalkingman 2023-11-13 12:25:12 +08:00
|
31
litchinn 2023-11-13 14:36:25 +08:00
1. 返回 int ,如果只是为了显示,直接返回状态名也是可以的,大多数情况直接返回 int
2. 查询请求都是 Get ,不适合放在 url 中的参数就放在 header 里 3. 哪边改看设计,没有绝对,前端想让后端改或者后端让前端改得拿出理由,如果任一一边改都无所谓那么领导决定,因为要考虑的因素还很多,比如部署时间,部署影响的范围,开发周期等等 |
32
nothingistrue 2023-11-13 14:54:14 +08:00
作为一个干了超长时间的后端,给点经验之谈。
一、压根没必要去深究前端做还是后端做,因为绝大多数情况下,两边都可以做。如果不是两边都可以做,那么前后端就还不是两个端。 二、对于旧项目来说,优先遵循既往习惯。如果以前就是前端做,那就继续前端做,哪怕这次后端改着更省事。反之亦然。如果你不这么做,那么将来改 BUG 的时候铁定要吃苦头。 三、对于全新项目来说,以工作量平衡为目标,让前端、后端、总架构、项目经理先去协商,协商好了之后,继续优先遵循既往习惯。 |
33
vikaptain 2023-11-13 15:07:38 +08:00
1. 我个人习惯把值返回,再返回一个字符串字段标识该值的含义,前端爱怎么玩怎么玩。
2. 以前也搞 get/put/post/delete 区分, 现在直接全部 post 。瞎整那么多事干嘛啊。 3. 这个还是具体情况具体分析。根据实际情况做判断,拒绝教条主义 以上是项目没有要求的情况,有要求的情况下跟着项目要求走。 |
34
yekern 2023-11-13 15:11:47 +08:00
统一接收和返回, Web 接口返回和接收数据不管你是 json 还是 form POST 值全统一字符串, 有什么特殊需求自己管自己的 后端自己转类型格式化, 前端也一样
|
35
lolizeppelin 2023-11-13 15:26:40 +08:00
1. 用 int 节约带宽就是扯淡,字符串提高开发效率,一眼能看懂的状态用 int 还要想半天
如果后端状态 int 字段本身很多地方都在用了,才考虑用 int 表状态 2.说了 100 便了 了,用 http 重定向用 post 传 get 带 body 就完事 |
36
lolizeppelin 2023-11-13 15:33:04 +08:00
3. 后端接口都要都要带版本前缀/v1.0 方便更新修 bug,通过多版本接口实现兼容
|
37
andyxic 2023-11-13 15:34:13 +08:00
难道不是应该前端要什么,后端给什么。后端要什么,前端给什么吗?这种都不能算上体力活的东西,就是为了不想干找点借口吧
|
38
zypy333 2023-11-13 15:39:51 +08:00
考虑未来的变更,影响最小的一方改
|
39
7inFen 2023-11-13 16:22:17 +08:00
一些小问题,前端改完,打包+发布得 5 分钟左右,后端可能 5 秒?
|
40
7inFen 2023-11-13 16:24:58 +08:00 1
用户量大建议后端改,即时更新。前端改完发布还要刷新缓存,如果用户填了一堆表单提交时发现页面过期会崩溃的。
|
41
dudubaba 2023-11-13 20:33:48 +08:00 1
都可以做,看谁话语权大,如果前端做,那后端在前端眼里就是 “sql boy”,如果后端做,前端在后端眼里就是“切图仔”。所以前后端要”紧密合作”,这样才能达到共同摸鱼的状态。
|