Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止重复的REST调用_Rest_Security_Duplicates - Fatal编程技术网

防止重复的REST调用

防止重复的REST调用,rest,security,duplicates,Rest,Security,Duplicates,我正在创建一个Android应用程序,它调用一个基于PHP的restapi方法来进行服务器端更新 例如,要向客户添加奖励积分,我们可以使用: 其中1是客户id,20是奖励积分 我想知道如何防止重复调用此URL。如果出于某种原因,此URL被调用两次,客户将获得20分以上。不存在客户无法在同一天获得更多积分的情况 另外,如何防止匿名执行此URL OAuth2.0是最好的解决方案还是有更好的解决方案 感谢解决此问题的REST/HTTP方法是向“奖励积分”资源发出“有条件的”POST请求 对POST2

我正在创建一个Android应用程序,它调用一个基于PHP的restapi方法来进行服务器端更新

例如,要向客户添加奖励积分,我们可以使用:

其中1是客户id,20是奖励积分

我想知道如何防止重复调用此URL。如果出于某种原因,此URL被调用两次,客户将获得20分以上。不存在客户无法在同一天获得更多积分的情况

另外,如何防止匿名执行此URL

OAuth2.0是最好的解决方案还是有更好的解决方案


感谢

解决此问题的REST/HTTP方法是向“奖励积分”资源发出“有条件的”
POST
请求

POST
20分的请求如下所示:

POST /customer/1/points HTTP/1.1
If-Match: "0"
Host: ...

20
If Match
标题意味着只有在您试图修改的资源仍具有指定状态时,
POST
才应完成。在这种情况下,如果客户的积分为
0
分,则20分将仅为
POST
ed。它可以被认为是一种机制

通常,如果if-Match前提条件失败,服务器应以错误代码412(前提条件失败)进行响应

注意:客户的积分应该是一种资源


为了防止未经授权访问点,服务器必须实现某种身份验证机制。最简单的方法是在用户未经身份验证的情况下使用401(未经授权)进行响应。如果用户经过身份验证,只是没有更新某些积分的权利,返回403(禁止)。

指定用户是否可以向任何其他用户授予积分?