2017-01-09 79 views
0

我正在NodeJS上构建一个API,我想为创建的接口使用正确的HTTP返回值。我使用的网站上显示的展示位置:RESTful API 404成功了吗?

我的问题: 我建与阿贾克斯的 “checkEmail” API。该页面调用服务器,该服务器检查用户输入的电子邮件是否存在。理论上,当找不到资源时,我应该返回404。如果电子邮件不存在,我将返回一个404 - 在这种情况下,用户可以成功(他可以使用此电子邮件)。但是,如果存在电子邮件,我将返回一个200.就屏幕而言,这将返回错误,因为电子邮件已被使用,用户将不得不输入另一个电子邮件。最后一种情况是,如果用户输入了无效的电子邮件。在这种情况下,我会返回500,说明您输入的内容不是有效的电子邮件。

这个逻辑是否正确?我怀疑,因为我使用404成功(在这种情况下)和200失败(电子邮件发现 - 已经使用)。

谢谢。

+0

你应该使用成功只要请求有效,实际上就是成功。如果你想验证一个电子邮件不存在并且它实际上不存在,那么它是成功的,所以你返回200.如果它存在,它不是成功的 – baao

回答

1

500应仅用于服务器错误(像内部异常),其中400错误意味着客户端错误,如无效输入。对于无效的电子邮件,这将是一个400家庭,因为客户可以更改输入电子邮件,它可能会成功。

对于一个数据库中不存在的对象,有一个关于它应该是20x还是404的争论。我个人不喜欢404,因为它只是因为API的数据库中缺少对象也可能看起来像路线不存在。 (即,当路由被定义为/ users/{id}时,我输入/ user/1234而不是userS/1234。如果路由模板不存在,那么大多数框架现在都有404捕获,这可能需要我的注意。中间的反向代理服务器可能会路由到不同的API服务器,我喜欢从快速浏览中了解路由模板是否正确以及对象是否在Db中不存在

因此,你可以使用204(无内容),这意味着主体没有任何内容(但这并不意味着数据库不会)。许多人使用这个DELETE,它不返回已删除在浏览器中有更多的意义,而不是纯粹的AJAX API,但它确实有效,你也可以只使用一个计划200.

-2

500用于服务器错误和40-用于用户错误,我建议200为机器人的情况下发现,不但改变身体结果