resuful接口的几种类型、put和post有什么区别?

这两个方法咋一看都可以更新资源,但是有本质区别的

具体定义可以百度,我这里就不贴了,光说我自己的理解

首先解释幂等,幂等是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称其是幂等的

对于两个参数,如果传入值相等,结果也等于每个传入值,则称其为幂等的,如min(a,b)

POST

用于提交请求,可以更新或者创建资源,是非幂等的

举个例子,在我们的支付系统中,一个api的功能是创建收款金额二维码,它和金额相关,每个用户可以有多个二维码,如果连续调用则会创建新的二维码,这个时候就用POST

PUT

用于向指定的URI传送更新资源,是幂等的

还是那个例子,用户的账户二维码只和用户关联,而且是一一对应的关系,此时这个api就可以用PUT,因为每次调用它,都将刷新用户账户二维码

比如一个接口用于用户生成,接收的数据是用户名、密码等相关信息,则用POST

RESTful建议所有的URI都是对应资源,所以创建用户不应该理解为一个行为,在此将此接口命名为:

/user/creation

每次调用它都会新建一个用户(假定用户名可以重复)

而PUT方法更加关心一个具体资源对应的URI,比如更新当前用户信息,这里可以用PUT

/user/me/update

这里用me来指代当前用户,如果是针对更多用户适用的接口,可以考虑

/user/{uid}/update

注意多次调用同一接口,只要提交的数据一致,用户信息每次结果就会一致,即产生同样的结果:服务器端某个具体的资源得到了更新

当需要以更新的形式来修改某一具体资源的时候,如何判断用PUT还是POST呢?

很简单,如果该更新对应的URI多次调用的结果一致,则PUT

比如更新某个blog文章,因为该文章具有单一的具体URI,所以每次更新提交相同的内容,结果都一致

/blog/{document_id}/update

在每次更新提交相同的内容,最终的结果不一致的时候,用POST

举个很常见的例子,一个接口的功能是将当前余额减一个值,每次提交指定该值为100,接口如下

/amount/deduction

调用一次,你的余额-100,调用两次,余额-200

这个时候就用POST

posted @ 2020-04-24 14:26  joker_one  阅读(1396)  评论(0编辑  收藏  举报