在 Django 中实现幂等删除

发布: (2026年2月9日 GMT+8 06:19)
2 分钟阅读
原文: Dev.to

Source: Dev.to

实现 Django 中幂等删除的封面图片

今天我在为我的 Django 库存系统实现删除 mutation。目标是让该端点具备幂等性:

DELETE /items/<item_id>/
  • 如果对象存在 → 删除它
  • 如果对象不存在 → 不做任何改变
  • 始终可以安全重试

问题

删除实际上并没有改变状态。

我写的是:

Item.objects.filter(item_id).delete()

而不是:

Item.objects.filter(id=item_id).delete()

由于查询没有在正确的字段上过滤,状态转变没有发生。端点看起来好像工作了,但底层状态并未被正确修改。

解决方案

使用:

Item.objects.filter(id=item_id).delete()

并放在事务中,使删除天然具备幂等性:

  • 已存在的对象 → 被删除
  • 不存在的对象 → 什么也不做
  • 在重试时安全

不需要额外的条件逻辑。

系统收获

幂等性往往来源于你如何构造查询和状态转变,而不是通过添加更多的控制流。

以这种方式设计删除可以让服务:

  • 无状态
  • 重试安全
  • 可预测

下一步

下一个特性是原子化的数量更新:

  • 强制不变量
  • 事务边界
  • 防止更新丢失

每天实现一个特性,首先关注正确性。

0 浏览
Back to Blog

相关文章

阅读更多 »

REST API(进行中)

markdown !Prasun Chakrabortyhttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws....