“a”应该是什么方法类型;投票“;资源是否在RESTAPI中?

“a”应该是什么方法类型;投票“;资源是否在RESTAPI中?,rest,http,jax-rs,Rest,Http,Jax Rs,我正在设计一个restful API。在这个API中,可以使用API发布、删除和获取案例。如果有一个案例你觉得特别重要,那么就可以对它投“一票”,这样一个案例就会变得更加优先 然而,我想知道这应该是什么类型的方法 应该是哪一个: GET /cases/{case_id}/vote POST /cases/{case_id}/vote PUT /cases/{case_id}/vote 调用投票方法只会将投票数增加1。 我现在倾向于把自己看作是对现有数字的更新(虽然POST也可以用于此),但我想

我正在设计一个restful API。在这个API中,可以使用API发布、删除和获取案例。如果有一个案例你觉得特别重要,那么就可以对它投“一票”,这样一个案例就会变得更加优先

然而,我想知道这应该是什么类型的方法

应该是哪一个:

GET /cases/{case_id}/vote
POST /cases/{case_id}/vote
PUT /cases/{case_id}/vote
调用投票方法只会将投票数增加1。
我现在倾向于把自己看作是对现有数字的更新(虽然POST也可以用于此),但我想知道惯例是什么。

首先我要命名资源

/cases/{case_id}/votes
这表明这是本案投票的资源

然后使用

POST /cases/{case_id}/votes
关于这个资源。在服务器上,投票数将增加一


不要使用
PUT
,因为这意味着客户可以控制不正确的投票总数。客户端只触发递增1,它没有设置投票总数。

首先我要命名资源

/cases/{case_id}/votes
这表明这是本案投票的资源

然后使用

POST /cases/{case_id}/votes
关于这个资源。在服务器上,投票数将增加一


不要使用
PUT
,因为这意味着客户可以控制不正确的投票总数。客户端只触发1的增量,它没有设置总投票数。

本主题似乎对应该使用什么有很好的想法,但在我的案例中没有给出明确的答案。本主题似乎对应该使用什么有很好的想法,但在我的案例中没有给出明确的答案。对于投票,我认为这是不够的,因为当前的建议不承认来自同一客户/用户的多张投票,因此投票毫无用处。用户/客户机需要添加到URI/资源中,或者其他一些技术允许每个用户/客户机只进行一次投票。如果需要添加,服务器将负责识别来自同一用户的重复投票。但这不是API问题,让服务器跟踪每个用户/客户端一票的约束实际上是将状态外部化到服务器。当穷人接近时,服务器可能会锁定IP地址,从而阻止进一步调用相应客户端的URI。但是,如果服务器是镜像服务器或位于不跟踪IP2Host连接的负载平衡器后面,则来自同一客户端的进一步请求可能会由第二台服务器处理,因此仍算作第二次投票。当然还有更好的技术,尽管将状态外部化到服务器可能并不总是最佳选择。您认为解决方案是什么?如果使用身份验证机制,则可以直接从经过身份验证的请求中提取用户/客户端,并将其放入资源中(通常是自己的数据库表,如
user\u vote
)。公共投票可能会返回投票给某个对象的用户列表,而私人投票只返回投票计数,而不是实际用户。如果没有使用身份验证机制(无论出于何种原因),则需要在URI中包含用户/客户端(或令牌)、头或发送到服务器的实际资源。OP在这个TBH上不够具体,因为我认为这还不够,因为当前的建议不承认来自同一客户/用户的多个投票,因此使得投票毫无用处。用户/客户机需要添加到URI/资源中,或者其他一些技术允许每个用户/客户机只进行一次投票。如果需要添加,服务器将负责识别来自同一用户的重复投票。但这不是API问题,让服务器跟踪每个用户/客户端一票的约束实际上是将状态外部化到服务器。当穷人接近时,服务器可能会锁定IP地址,从而阻止进一步调用相应客户端的URI。但是,如果服务器是镜像服务器或位于不跟踪IP2Host连接的负载平衡器后面,则来自同一客户端的进一步请求可能会由第二台服务器处理,因此仍算作第二次投票。当然还有更好的技术,尽管将状态外部化到服务器可能并不总是最佳选择。您认为解决方案是什么?如果使用身份验证机制,则可以直接从经过身份验证的请求中提取用户/客户端,并将其放入资源中(通常是自己的数据库表,如
user\u vote
)。公共投票可能会返回投票给某个对象的用户列表,而私人投票只返回投票计数,而不是实际用户。如果没有使用身份验证机制(无论出于何种原因),则需要在URI中包含用户/客户端(或令牌)、头或发送到服务器的实际资源。OP在这个TBH上不够具体