RESTful URI 设计来对请求体中未包含的字段执行更新操作?
RESTful URI design to perform an update operation on a field that is not included the request body?
我正在尝试构建一个简单的电子邮件验证 API。您可以在下面按顺序找到预期的客户请求:
- 客户端得到一个
email address
作为输入。 (例如邮件@example.com)
- 客户端发送请求:
GET /emails/?email=mail@example.com
- 如果之前没有创建过
mail@example.com
,意味着之前的请求returns一个空列表作为响应,它发送一个请求:POST /emails/
其中email@example.com
是在请求正文参数中。
- 客户端发送请求:
POST /email-verifications/
,请求正文为email_id
,并新建一个邮箱验证对象。创建成功后,客户端会在响应正文中收到一个token,并将6位验证码发送到相应的邮箱。
- 现在客户端得到
verification code
作为用户的输入。
- 客户端发送请求:
PATCH /email-verifications/id/
,请求正文中有token
和code
。
我不太确定最后一步,因为相应的更新操作收到两个输入 token
和 code
,这两个输入不会在实例中更新。相反,它们将与现有实例进行比较,成功后另一个字段 is_verified
将被更新。
这是实现这种操作的正确方法吗?或者有什么我可以遵循的更好的做法吗?
PATCH
通常不是最适合的东西,我认为你可能也不应该在这里使用它。
我们 运行 遇到了与您类似的问题,想知道如何设计它。在我们的示例中,它不是 token
和 code
,而是用于更改用户密码的 API。
同样在我们的例子中,客户端会向服务器发送新密码,但服务器永远不会 return 密码。
最适合我们的解决方案最终是一个特殊的 password
资源,其中 url 如:
/users/x/password
针对此 url 的 GET
请求将始终产生 403,并且此处仅支持 PUT
请求。我有点觉得你的设计问题应该以同样的方式解决。
我正在尝试构建一个简单的电子邮件验证 API。您可以在下面按顺序找到预期的客户请求:
- 客户端得到一个
email address
作为输入。 (例如邮件@example.com) - 客户端发送请求:
GET /emails/?email=mail@example.com
- 如果之前没有创建过
mail@example.com
,意味着之前的请求returns一个空列表作为响应,它发送一个请求:POST /emails/
其中email@example.com
是在请求正文参数中。 - 客户端发送请求:
POST /email-verifications/
,请求正文为email_id
,并新建一个邮箱验证对象。创建成功后,客户端会在响应正文中收到一个token,并将6位验证码发送到相应的邮箱。 - 现在客户端得到
verification code
作为用户的输入。 - 客户端发送请求:
PATCH /email-verifications/id/
,请求正文中有token
和code
。
我不太确定最后一步,因为相应的更新操作收到两个输入 token
和 code
,这两个输入不会在实例中更新。相反,它们将与现有实例进行比较,成功后另一个字段 is_verified
将被更新。
这是实现这种操作的正确方法吗?或者有什么我可以遵循的更好的做法吗?
PATCH
通常不是最适合的东西,我认为你可能也不应该在这里使用它。
我们 运行 遇到了与您类似的问题,想知道如何设计它。在我们的示例中,它不是 token
和 code
,而是用于更改用户密码的 API。
同样在我们的例子中,客户端会向服务器发送新密码,但服务器永远不会 return 密码。
最适合我们的解决方案最终是一个特殊的 password
资源,其中 url 如:
/users/x/password
针对此 url 的 GET
请求将始终产生 403,并且此处仅支持 PUT
请求。我有点觉得你的设计问题应该以同样的方式解决。