简介
“你好,你们这里能修电脑吗?”ABC:“没有。”“嗯嗯,请问我应该用什么方法来改用户名?”A:"请使用 POST"B: "请使用 PUT"C:"请使用 PATCH""太好了,带上A一起去吧。”“嗯,好的”
那么,你是那种会被带走的程序员吗?
我最近就成为一个无法正确解释“POST”、“PUT”和“PATCH”的工程师。
由于众所周知的原因我一直在使用这些方法,偶然间,我特别想知道 POST 还是 PUT 更适合当前的 API,后来我仔细琢磨了一下,弄清楚了其中的区别。
这次,我将介绍三种方法间的区别,这三种方法的用法其实令人惊讶。
为什么 POST/PUT/PATCH 不明确?
为什么这么多人首先混合使用 POST、PUT 和 PATCH?
-
PUT 和 PATCH 都用于更新
-
每种方法的使用可能会因框架或 API 设计而异(例如,某些 API 允许使用 PUT 进行一部分更新)
-
从学习的早期阶段就介绍了方法,因此很容易进行,不会有歧义。
我想可以给大家三样东西:
POST 和 PUT 之间的区别
首先我用通俗易懂的方式解释一下POST和PUT(PATCH)的区别。
如果你读过 Zalando RESTful API,它对 REST API 的介绍相当全面,因此我在这里引用一下:
POST 对集合节点意味着:“请将对象添加到由 URL 标识的资源集合中。”
PUT 的意思是“用该对象替换 URL 表示的现有资源”
如果你能理解到以上这一点,请继续下一步,但我个人觉得它有点难以形象化,所以我会在下一步中解释它。
例如,在使用POST的情况下,路径设计如下:
# POST
/v1/user
使用 PUT 时:
# PUT
/v1/users/12345
换句话说,添加用户本身时使用POST方法,更新用户(ID为12345)的元素,
例如,改名字时使用PUT。
PUT 和 PATCH 之间的区别
PATCH 的意思是“请更改与此更改请求对应的 URL 标识的资源”
换句话说,PATCH是一个改变所有资源的请求,如果该资源不存在,就会创建一个新的。
# PUT
curl -XPUT /v1/users/12345 -d '{ "age": 31 }
对于 PUT,假设有用户(ID:12345),则将用户年龄更新为 31 岁。
# PATCH
curl -XPUT /v1/users/12345 -d
'{ "name": "mina", "age": 31,
"email": "xigua@ac.cn" }
在PATCH的情况下,如果有用户(ID:12345),则会立即更新。
例如有用户(姓名:mina,年龄:30,电子邮件:xigua@ac.cn),则仅更新年龄。叫 mina 的用户会立即更新,但似乎只有年龄字段更新。
如果用户(12345)不存在,则会添加一个新用户(如使用POST)。
结语
让我十分惊讶的是,有很多人都无法正确地解释POST和PUT的区分,即使是已经做了多年研发工程师的人。
因为直到我写完这篇文章时,当我被要求以模糊的方式来解释事情时,我也都无法做到。
当你想成为一名强大的工程师,掌握这些基础知识至关重要。
如果读到有关这一时期的内容,你也可以问问同事一些问题。
如果您已经读到这里,请点赞并收藏。如果您能关注@21CTO,我们也非常高兴。
明天的文章再见!