REST POST提供ID时该怎么办?

我正在开发一个JAX-RS API,其中包含一个简单的“Person”表,其中包含字段“id”和“name”,其中“id”与
mysql数据库中的自动编号相关联.一个典型的用例是POST一个新人.

JSON消息的POST {“name”:“Bob”}可能会返回,例如{{id“:101,”name“:”Bob“}.

如果调用者请求包含标识符的对象的POST,该怎么办?看来我的选择是:

>拒绝请求无效
>从请求中删除id并继续处理
>像UPSERT一样对待POST(更新失败时,删除ID并插入)
>尝试使用提供的ID创建新记录

从安全角度来看,最后一个选项似乎很狡猾.如果我使用的是mysql,恶意用户可以在一次请求中将自动编号提升到最大值.

如何在REST API中处理在POST请求中包含id?

最佳答案 你绝对应该拒绝所有击中/ users / endpoint的请求.首先出于安全原因(在DB级别),其次,这不是客户端生成/建议ID的工作.

因此,答案是拒绝请求作为无效以及适当的状态代码(400)和解释拒绝原因的消息.

第二种选择是不直观的,一种是发送和ID(正如我已经写过的那样是一个坏主意) – 不希望收到它发布的不同ID.在正文中发送ID对于PUT请求是有意义的,并且它假定对象已经创建/存在 – 这是更新.

第三个选项不是RESTful – REST中没有upsert – POST会创建新资源.第四种选择根本没有意义 – 提供ID不是客户的工作.

点赞