我正在为Web应用程序内部的第三方api(电子邮件套件)构建一个包装器,可以通过内部和自己的api访问。例如,这些方法将电子邮件地址和订阅列表作为参数并返回结果代码。
基本上我想:
例如成功:
所有这些案例基本上都属于2xx类,但必须触发不同的用户反馈消息,这就是我对使用HTTP status codes不满意的原因。使用纯HTTP状态代码不能提供足够详细的反馈并定义a)附加状态代码或b)完全自定义状态代码感觉如此随机。
那么,去这里的最佳做法是什么?
This answer建议我应该始终使用标准HTTP状态代码,如果它们不适用,我的设计是错误的。如果不在客户端使用额外的逻辑和api调用,我如何区分差异?
答案 0 :(得分:5)
HTTP状态代码的目的是传达 HTTP操作的状态 - 成功,未授权,待处理,配置错误等等。在您描述的所有情况中,请求的操作都是成功的 - 一切都按计划进行。所以最有可能的状态代码是200 OK或201 CREATED for all cases。
不应将其他特定于域的状态强行敲入HTTP状态。只需在回复中返回其他字段即可。例如:
POST http://www.example.com/users
{
name : "The User",
email : "email@theuser.com"
}
回复将包含:
201 CREATED
{
status : "Optin mail sent",
timestamp : "...",
...
}
这样可以更清晰地分离关注点并提高可扩展性。
答案 1 :(得分:3)
如果不在客户端使用额外的逻辑和api调用,我如何区分差异?
使用有意义的回复机构。状态代码就是这样。您不想为每个新的结果组合创建新的HTTP状态代码。
所以对于前三个场景:
HTTP/1.1 201 Created
...
{
contact_created: "true",
optin_mail_sent: "true",
coupon_sent: "true",
}
您需要在客户端以任何方式显示某些显示逻辑(例如,从254 ContactYesOptInNoCouponYes
到相应的通知),因此响应主体似乎是最明智和可扩展的方式。