django-rest-framework:处理业务逻辑以及要做什么 return?

django-rest-framework: Handling business logic and what to return?

在我的API一个可以提交"Parent"和1个child。这是常见的用例。输入 parent 时,您总是至少输入一个 child。这在UI上也是一样的。可能存在用户想要输入重复项 parent 的情况,例如。它已经存在于系统中。在这种情况下,在 UI 中,用户可以选择他是否确实想要添加重复项,或者他是否想要将 child 添加到现有 "duplicate" 记录之一。我希望这已经足够清楚了。

我的问题是如何通过 api 执行类似的 "workflow"?提交副本后,它应该 return 一个可能的现有条目列表,可以向其中添加 child。应该如何 return 编辑此列表?用什么状态码? (不是真正的客户端错误)

因此您的请求类似于:

POST /parents

{"name": "Foo", "child": { ... }}

如果 "Foo" 已经存在,您需要客户选择现有记录并在其中添加 child,对吗?那么像 this 这样的响应可能是合适的:

HTTP/1.1 409 Conflict

{
  "message": "Choose an existing parent.",
  "parents": [
    {"id": 1, ...},
    {"id": 2, ...},
    {"id": 42, ...}
  ]
}

这需要客户端重复请求,例如:

POST /parents/42/children

{ ... }