开发 API 的时候 http method 应该使用 PUT、PATCH、DELETE 等协议还得直接用 GET、POST

2024-03-25 21:51:21 +08:00
 Inzufu
如题,
感觉前三者好像更规范些,不过好像很少见有用除 GET 和 POST 外协议的接口。
15788 次点击
所在节点    程序员
142 条回复
thinkershare
2024-03-26 10:32:15 +08:00
这种重复提问,管理员应该禁止掉。
Torpedo
2024-03-26 10:33:11 +08:00
restful 不是一个好风格。因为实践里,我见到的每个自称 restful 风格的 api 都有不同。特别是一些模糊行为
MrKrabs
2024-03-26 10:34:21 +08:00
RESTful=野鸡
zw1one
2024-03-26 10:45:41 +08:00
post 一把梭真的很香,代码也很健壮,也很方便复制粘贴。省下来的时间可以摸鱼,活动下颈椎,让你身体精神保持健康。
julyclyde
2024-03-26 11:12:49 +08:00
@Inzufu PUT/PATCH/DELETE 的 URI 是一个目标对象; POST 的 URI 是一个 handler ,参数是一个对象
daiv
2024-03-26 11:31:59 +08:00
@raycool @maymay5 @shuax @ShinichiYao @Laobai @zxkxhnqwe123 @zw1one 如果全部用 Post, 那么路径如何设计更合理?

创建( Create ): POST /api/v1/user/create
更新( Update ): POST /api/v1/user/update
读取( Read ): POST /api/v1/user/read
列表( List ): POST /api/v1/user/list
操作( Operate ): POST /api/v1/users/operate (Delete, HardDelete, Restore, Copy 等等...)

各位大佬有什么建议吗? 这样是否合理.
leaflxh
2024-03-26 11:40:10 +08:00
无非在于错误在哪处理

.then(res=>{ res.code === 200})
还是
.catch(err)
olaloong
2024-03-26 11:43:56 +08:00
稍微复杂点的业务用 RESTful 都是一团糟,毕竟一次调用里操作的可不止一个资源。硬套 RESTful 的话,要么按资源拆分请求,那复杂均衡、事物就糟了,要么在一个资源操作里隐性操作其他资源,时间一长就变成屎代码。
见过几个项目设计之初想用 RESTful ,最后都变成了特色 RESTful 的杂交项目。
flyqie
2024-03-26 11:46:30 +08:00
@leaflxh #67

个人觉得 post+200 一把梭主要是为了分层,走到 catch 是基础设施问题,其他的是业务问题。
flyqie
2024-03-26 11:47:36 +08:00
@flyqie #69
而且还能避免很多奇怪问题
crackidz
2024-03-26 11:48:08 +08:00
取决于你客户端开发的水平😂
JenJieJu
2024-03-26 11:56:54 +08:00
graphql ,前端自己撸
9c04C5dO01Sw5DNL
2024-03-26 11:59:42 +08:00
必须是考虑语义、Safe 和 Idempotent ,这些性质和 restful 无关,纯纯 rfc2616 中定义的啊。。。
chendy
2024-03-26 12:14:18 +08:00
全部 POST ,因为要兼容 ie ,put 之类的不敢用,get 有时候缓存了全麻
全部 200 ,因为对接的前端喜欢,反正写起来都一样
momo24672
2024-03-26 12:17:09 +08:00
GET 读
POST 创建
DELETE 删除
PATCH 更新

POST 一把梭的全是 SB/垃圾
lesismal
2024-03-26 12:26:22 +08:00
> POST 一把梭的全是 SB/垃圾

@momo24672 不选择 Restful 的人会越来越多, 注意, 我说的是"不选择", 而不是"放弃", 因为 Restful 本来就不是必选项. 另外, 别太自信了
flyqie
2024-03-26 12:33:16 +08:00
@momo24672 #75

我记得 bilibili 部分项目貌似最后就是 post 一把梭。
proxychains
2024-03-26 13:03:49 +08:00
@DOLLOR #55
GET
/login/username/md5(pwd)
picone
2024-03-26 13:33:10 +08:00
默认情况下,NginX 会认为 POST 等是非幂等请求,不会进行重试,POST 一把梭用户怎么解决这个问题
wjfz
2024-03-26 13:37:24 +08:00
非要 post 也行,像#66 那种也还算清晰。
关键是错误处理,用 200 状态+错误码,前后端约定几十个错误码是一件及其傻逼的事情。

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

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

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

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

© 2021 V2EX