更正RESTAPI语义以检查电子邮件是否存在

更正RESTAPI语义以检查电子邮件是否存在,rest,http,Rest,Http,我有一个API,看起来像GET user/exists/by?email=。 API的目标是检查电子邮件是否存在 我对API的正确语义应该是什么感到困惑?目前,我有两个选择 备选案文1: 使用HTTP状态代码驱动API 如果电子邮件存在,则发送204 如果电子邮件不存在,发送404 如果电子邮件验证失败,则发送400 备选案文2: 当电子邮件存在时,发送带有正文的200{“存在”:true} 当电子邮件不存在时,发送带有正文的200{“存在”:false} 如果电子邮件验证失败,则发送40

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

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

备选案文1: 使用HTTP状态代码驱动API

  • 如果电子邮件存在,则发送
    204
  • 如果电子邮件不存在,发送
    404
  • 如果电子邮件验证失败,则发送
    400
备选案文2:

  • 当电子邮件存在时,发送带有正文的
    200
    {“存在”:true}
  • 当电子邮件不存在时,发送带有正文的
    200
    {“存在”:false}
  • 如果电子邮件验证失败,则发送
    400
  • 如果电子邮件存在,则发送204
  • 如果电子邮件不存在,发送404
我认为你不会找到一个权威的答案来回答你的问题

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

然后仔细考虑一个小JSON有效载荷与一个零长有效载荷之间的差值是否显著。 此外,回想一下,如果客户机不希望返回表示的副本,那么客户机可以使用方法令牌

HEAD
,而不是
GET
,来请求资源元数据的刷新副本

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

HTTP状态代码是关于域的元数据。因此,在文档中使用这种机制来细化细粒度的差别,实际上是错误的

例如,看一下,请注意对不安全请求处理2xx和4xx响应之间的区别

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

但是,据我所知,这并不权威。这一切都是非常波动的,不容易匹配到一个特定的RFC或咨询