发现客户端同学和前端的对于接口风格的偏好还是有些不一致的

2021-12-17 11:18:00 +08:00
 zoharSoul

比如 users/{user}/repos 这样的 path param, 对于 android 来说, 因为 retrofit 支持, 写起了体验很好, 所以 android 同事还是很喜欢的. 但是前端同事一般都比较抵触.

再比如只有一两个参数的 post 请求, 用 application/x-www-form-urlencoded ,客户端同事一般没啥意见. 但是前端一般会问能不能用 application/json 的.

还是挺有意思的. 哈哈

6798 次点击
所在节点    程序员
74 条回复
NathanDo
2021-12-17 11:27:39 +08:00
JSON 确实方便啊,直接定义对象就完了,application/x-www-form-urlencoded 的话得
```
const body = new URLSearchParams();
body.append("customerNumber", "customerNumber");
body.append("password", "!password");
```
然后再 toString()一下
66beta
2021-12-17 11:30:19 +08:00
json 更百搭,客户端同事偷懒罢了 XD
daimubai
2021-12-17 11:33:42 +08:00
@NathanDo json 当然方便,楼主说的是只有一两个参数的情况下,后端偷懒不想去建个实体
daimubai
2021-12-17 11:34:51 +08:00
这个和哪个端没关系。和对接的人有关系
yuningWang8
2021-12-17 11:35:33 +08:00
分人吧,作为前端,觉得第一种接口风格更好啊。
aikilan
2021-12-17 11:35:46 +08:00
其实无所谓,只要有约定的格式,多别扭都行,大不了前端封装个方法就是了。
zoharSoul
2021-12-17 11:41:03 +08:00
@NathanDo #1
@daimubai #3

再比如只有一两个参数的 post 请求, 用 application/x-www-form-urlencoded ,客户端同事一般没啥意见. 但是前端一般会问能不能用 application/json 的.

这种情况下客户端同事更喜欢 application/x-www-form-urlencoded 的, 而不是 json. 指的不是后端的偏好.而是客户端的偏好
marcong95
2021-12-17 11:58:14 +08:00
@daimubai #3 如果整套接口基本上基本是 x-www-form-urlencoded 的话,直接 axios 插个拦截器就好了把,不用 axios 那就自己封装个函数。那如果只是后端偷懒在几万个 json 的接口里塞了一两个 x-www-form-urlencoded ,这不抵触就有鬼了。。。
IvanLi127
2021-12-17 12:12:19 +08:00
第二点的偏好是指客户端不介意不统一的接口返回而前端介意吗? 😏
zoharSoul
2021-12-17 12:26:07 +08:00
@marcong95 客户端同事喜欢混着, 而不是无脑 json. 比如只有几个字段的, 他们就不想让后端写成 json 的. 而喜欢用 form
dapang1221
2021-12-17 12:27:19 +08:00
go 后端:用 protobuf 吧
前端:?
zoharSoul
2021-12-17 12:30:02 +08:00
@dapang1221 说道 protobuf, android 同事很喜欢这个, 据我了解. 似乎是因为 Google 官方对 protobuf 有支持, 只需要拿到 pb 文件, 就可以自动在 build 的时候生成全套请求, 只需要调用就行了, 比 golang 还方便.
yikyo
2021-12-17 12:33:53 +08:00
前端只想统一,以前公司 post 数据时,一会 formdata ,一会 json ,真心烦
chendy
2021-12-17 12:34:22 +08:00
可能是前端把 axios 配太死,只能发 application/json ,别的 content-type 都发不出来。。。
steptodream
2021-12-17 12:36:41 +08:00
我想知道一下,统一 json 的话,怎么在数据里带图片等文件参数,我是有文件的的请求就用 formdata ,没有就用 json
chairuosen
2021-12-17 12:37:24 +08:00
POST 有些后端还喜欢把一些参数放 query ,一些放 body
knives
2021-12-17 12:38:29 +08:00
后端用 Spring MVC 的话,application/x-www-form-urlencoded 有一个好处,就是可以 Controller 中一个方法同时兼容 GET 和 POST 传参。application/json 的话要写实体和 @RequestBody 了。
Austaras
2021-12-17 13:01:40 +08:00
@steptodream base64 转一下,也不是不能用
xmumiffy
2021-12-17 13:03:54 +08:00
强类型语言用 JSON 得建实体类 。一个接口一个实体类谁受得了
xmumiffy
2021-12-17 13:05:41 +08:00
其实只要后端把 query 与 body 的 formData 和 json 合并了就皆大欢喜了 。
我们后端就是全兼容的

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

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

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

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

© 2021 V2EX