定义状态代码

Gar*_*rin 1 api rest http response

我正在为Web应用程序内部的第三方api(电子邮件套件)构建一个包装器,可以通过内部和自己的api访问.例如,这些方法将电子邮件地址和订阅列表作为参数并返回结果代码.

基本上我想:

定义状态代码以显示不同的成功/失败状态.

例如成功:

  • 新联系人已创建
  • 已创建新联系人并发送了optin邮件
  • 已创建新联系人并已发送优惠券
  • 订阅现有联系人
  • 现有联系人订阅和优惠券已发送
  • 等等..

所有这些情况基本上都是2xx类别,但必须触发不同的用户反馈消息,这就是我对使用HTTP状态代码感到不满意的原因.使用纯HTTP状态代码不能提供足够详细的反馈并定义a)附加状态代码或b)完全自定义状态代码感觉如此随机.

那么,去这里的最佳做法是什么?

这个答案表明我应该总是使用标准的HTTP状态代码,如果它们不适用,我的设计是错误的.如果不在客户端使用额外的逻辑和api调用,我如何区分差异?

met*_*bed 5

HTTP状态代码的目的是传达HTTP操作的状态- 成功,未授权,未决,配置错误等等.在您描述的所有情况中,请求的操作都是成功的 - 一切都按计划进行.因此,对于所有这些情况,最可能的状态代码是200 OK或201 CREATED.

其他特定于域的状态不应强行敲入HTTP状态.只需在回复中返回其他字段即可.例如:

POST http://www.example.com/users
{
    name : "The User",
    email : "email@theuser.com"
}
Run Code Online (Sandbox Code Playgroud)

回复将包含:

201 CREATED
{
    status : "Optin mail sent",
    timestamp : "...",
    ...
}
Run Code Online (Sandbox Code Playgroud)

这样可以更清晰地分离关注点并提高可扩展性.