首页 > 解决方案 > 更正 REST API 语义以检查电子邮件是否存在

问题描述

我有一个看起来像GET user/exists/by?email=<email_here>. API 的目标是检查电子邮件是否存在。

我对 API 的正确语义应该是什么感到困惑?目前,我有两个选择。

选项 1:使用 HTTP 状态代码来驱动 API。

选项 2:

标签: resthttp

解决方案


  • 如果电子邮件存在,则发送 204
  • 如果电子邮件不存在,则发送 404

我认为您不会为您的问题找到权威的答案。

也就是说,我鼓励你做的一件事是查看服务器发送的 HTTP 响应,特别注意发送的元数据的字节数;状态行、标题等。

然后仔细考虑小型 JSON 有效负载和零长度有效负载之间的差异是否如此重要。

此外,回想一下,如果客户端不希望返回表示的副本,则客户端可以使用方法令牌HEAD而不是GET请求资源元数据的刷新副本。

200 对 404 更难。200 表示有效负载是所请求资源的表示(默认情况下可缓存)。404 表示有效负载是错误消息的表示(默认情况下可缓存)。

HTTP 状态代码是有关通过网络域传输文档的元数据。因此,使用它来处理文档中的细粒度区别确实是错误的机制。

例如,查看缓存失效规范,请注意处理 2xx 和 4xx 对不安全请求的响应的区别。

原则上,HTTP 数据属于标头,您的数据属于正文,只有当您的数据对通用 HTTP 组件感兴趣时,我们才应该将您的数据副本提升到 HTTP 元数据。

但是,据我所知,并不权威。这都是非常随意的,不容易与特定的 RFC 或咨询相匹配。


推荐阅读