同事说:后台接口不能使用除 post/get 之外的方法,path 里不能带参数

2020-01-02 16:42:17 +08:00
 unco020511

我写了接口文档,尽量按照 RESTful 风格写的,然后前端+部分后台同事说不能用 put 和 delete,还有 path 里不能带参数; 我问为啥,他说这样不规范 我该如何说服同事?

获取对应学期下评语:[get] /back/remark/{termId} 删除数据:[delete] /back/record/{recordId}

21667 次点击
所在节点    Java
181 条回复
lihongjie0209
2020-01-02 16:58:10 +08:00
@unco020511 #19 传不了, 只能用 query string http://xxx.com/api?a=1&b=2

其中
/api 是 path
?a=1&b=2 是 query string
unco020511
2020-01-02 16:59:27 +08:00
@a719114136 全部用 post/get 我能理解,但是 path 不能带参数就有点奇怪;

path 可以理解为资源定位,那 id 放在 path 里获取资源不应该更合理吗;

还有前端框架不支持也有点牵强,我原先做移动端+web,都是支持的,且新框架一般都支持的很好,比如 android 的 retrofit
MaPeiren
2020-01-02 17:00:25 +08:00
可以不这么做,但是不能说你不懂阿,这真的上头
unco020511
2020-01-02 17:00:48 +08:00
@mcfog 搜了一下发现了新天地,哈哈
marcong95
2020-01-02 17:05:56 +08:00
@unco020511 #17 十分经典的用来杠“反 RESTful”群体的例子了
ic2y
2020-01-02 17:07:27 +08:00
@unco020511 如果是一个大厂,只用 GET 和 POST 还是比较靠谱的。 用 RESTful 风格 可能会有不少潜在麻烦。可能的问题有:

1.监控问题:因为监控 URL 请求的时候,需要进行 URL 聚合统计操作,如果用 RESTful 风格 非常难以提取 URL 的模型进行聚合(因为有人用 python,有人用 java,还有不同的应用框架,非常难以在 client 端进行 url 模式提取。而在 server 端模式提取要求的性能又很高。还不如直接用 get 和 post )。

2.配套的日志采集系统:RESTful 风格 在独立上下文的日志引擎里,很难用 URL 进行模式提取。

3.配套的其他系统的问题: 统一 API 网关接入(如果是自研的,需要完整支持 restful 风格)。自动化测试系统(如果自研,也要兼容)。代码审计和代码覆盖平台 等等。

如果你用了 RESTful 风格,那么需要整个 开发运维链路上的每个环节,都要支持完整的操作。但是实际上,很多系统只是支持简单的 GET 和 POST 协议。

你不得不推动 每个团队来支持你的需求,这个等待 是很麻烦的。
a719114136
2020-01-02 17:07:50 +08:00
@unco020511 看错了吧,我说的是后端。
比如:
* /user/ {user_id} /update
* /user/ {user_id} /delete

这种类型的 url,有的框架是不支持的
passerbytiny
2020-01-02 17:07:52 +08:00
不需要说服。若接口定义、实现、权责人全在你,你只管照自己走,爱用不用。若定义、实现在你但权责人不是你,准备跑路。

当然有几点要注意:
一,RESTful 是一种编码风格而不是工具,只存在用不用,不存在尽量用,若你不能让所有接口都遵循 RESTful,那就不要用。
二,RESTful 与 HTTP 相互适应,但与 HTML 并不相互适应,APP、好的前端框架能够很容易的适配 RESTful 接口,但一般的前端框架以及不用框架的 Web 开发,是只认 get、post 不认其他请求的(严格的说,底层技术是支持其他请求的,但是框架设计思想上不支持)。
三,如果接口是 RESTful,那么底层既是不是领域驱动设计,也要对此有所了解,否则你在 URI 命名上绝对会遇到矛盾。
unco020511
2020-01-02 17:12:08 +08:00
@a719114136 27 不好意思看错了.可能后端部分框架确实不支持吧
unco020511
2020-01-02 17:12:57 +08:00
@ic2y 26 这样说挺有道理,原先我没有想到这些
Raymon111111
2020-01-02 17:13:10 +08:00
习惯跟随团队
Raymon111111
2020-01-02 17:14:20 +08:00
如果你希望说服团队

那应该能列举这么干的坏处和按照你这么干带来的好处

一句规范打发大家毫无说服力
opengps
2020-01-02 17:14:38 +08:00
这么做很好,很多人不知道 put,delete。不瞒你说我工作 8 年了也没写过表单的 put,delete 方法
artikle
2020-01-02 17:15:09 +08:00
@unco020511 Path 带参数 有想过接口日志统计怎么处理吗
Raymon111111
2020-01-02 17:15:36 +08:00
你可以从 研发效率, 出错概率, 代码易读性, debug 难度, 测试覆盖 等等角度阐述你的观点

(带来收益的事情才去做
passerbytiny
2020-01-02 17:16:16 +08:00
@ic2y #24 你说了那么多问题,总结起来就一句话:改起来好麻烦。如果一个大厂把这些当问题,那么这大厂要么是假的,要么“老且不能饭”。
wisdom
2020-01-02 17:16:46 +08:00
他这样要求说实话没毛病
szq8014
2020-01-02 17:17:08 +08:00
我猜后台是 php
szq8014
2020-01-02 17:17:56 +08:00
emmm 竟然是 java 版块。。springMVC 天然支持 restful 为啥他们不会用……
randyo
2020-01-02 17:24:32 +08:00
反正只用 post 前端没意见,反正都是后端处理数据🙄

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

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

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

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

© 2021 V2EX