我正在开发一个JAX-RS API,它包含一个带有“id”和“name”字段的简单“Person”表,其中“id”绑定到mysql数据库中的自动编号。一个典型的用例是发布一个新的人。REST POST提供ID时该怎么办?
POST的JSON消息{"name":"Bob"}
可能会返回,例如,{"id":101,"name":"Bob"}
。
如果调用者请求包含标识符的对象的POST,该怎么办?看来我的选择是:
- 拒绝为无效请求
- 从请求删除ID,并继续处理
- 对待POST像UPSERT(上更新失败,删除ID和插入)
- 尝试使用提供的ID
的最后一个选项来创建新的记录,似乎从安全角度狡猾。如果我使用mysql,恶意用户可以在一个请求中将我的自动编号上升到最大值。
如何在REST API中处理POST请求中包含的id?
选项#1或选项#2。选项#2可能会更方便,但如果有人稍后用某个ID发送某些内容并且不理解您为什么不使用它,可能会引起混淆。 – Bill
我赞成拒绝。如果用户发送无效请求,您永远无法确定实际的意图是什么或者错误的确切性质。 –
拒绝它。 400错误请求。服务器创建的标识符的全部重点是......呃,服务器来创建它。这是POST的一般性质。允许客户干预这一过程,可能会产生不良后果。由于比尔提到的原因,我也远离2,而PM暗示。发送400错误信息 –