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
{ ... }
在我的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
{ ... }