API错误代码响应模式的最佳选择是什么?
不是使用表示不同类型错误的不同代码
100001 // username not provided
100002 // password not provided
100003 // password too short
...
我看到一些other use patterns,如下所示(非顺序)...
20000
20001
20004
20015
还有其他建议吗?
答案 0 :(得分:6)
IETF(互联网标准组织)的建议是使用application / problem + json媒体类型。
值得注意的是,它们不使用随机数,而是使用字符串(特别是uris)来识别错误。
这是一个主观的问题,但是即使您不使用其格式,我也会认为username-not-provided
几乎在所有方面都优于100001
。
答案 1 :(得分:5)
根据我开发和使用Web服务的经验,我发现结合使用顶级HTTP状态代码和更低级API错误代码的策略相当有效。请注意,较低级别的API错误代码不必是整数,而可以是任何枚举。对于一个众所周知的公共示例,AWS简单电子邮件服务(SES)使用此strategy of using both HTTP status codes and API level error codes。您可以看到一个sample error code response for SES here。请注意,尽管SES使用XML响应错误有效负载,但该策略对JSON响应有效负载同样有效。
根据我的经验,使用此策略时需要牢记以下几点:
ConfigurationSetDoesNotExist
和InvalidParameterValue
仅在SES返回400 Bad Request
时才有意义-在返回500 Internal Server Error
时返回这些状态码是没有意义的。同样,如果您正在编写一个称为下游服务和数据库的Web服务,则可能会有一个FooDownstreamServiceTimedOut
错误代码,当下游Web服务调用超时时,您将返回一个504 Gateway Timeout
HTTP状态代码。 “ Foo” Web服务。您可能还具有一个MyDatabaseError
错误代码,当您对内部数据库的查询失败时,将返回一个500 Internal Server Error
HTTP状态代码。希望有帮助。
答案 2 :(得分:0)
我会说这在很大程度上取决于您提供的是哪种API。
我总是在每个响应中都包含一个名为ack
的字段,该字段具有以下三个状态:failure
,warning
,success
。成功显然是一切顺利。在发出警告时,请求将通过,并且JSON将包含预期的输出,但它还将包含一个warning
字符串,甚至在出现多个警告的情况下更好,该数组称为errors
,该数组包含多个包含code
,string
和type
的对象。在failure
的情况下,也将返回此数组,除了此数组之外,什么也没有。
该数组在每个错误或警告中包含一个对象,具有一个代码(我建议您以最初的想法10001、10002 ... ...)和一个用短短语解释错误的字符串(例如{{1 }})。 Username contains invalid characters
是type
或error
,在warning
确认不仅包含错误而且包含警告的情况下很有用。
这使得通过错误代码查找错误变得容易(我将提供一个页面,同时提供一个API,该页面包含表中的所有错误代码以及它们的简短描述,简短描述以及常见原因/解决方案/等。 -所有这些信息也应该可以通过API获得,通过提供错误代码可以访问它们,同时仍然可以快速获得简短的文本响应,以便用户可以在大多数情况下指出问题所在而无需查找错误。>
这还允许将警告和错误轻松输出给最终用户,而不仅仅是开发人员。通过将我的想法与API调用结合使用来获取有关错误的信息,使用API的开发人员可以在需要时轻松地向最终用户提供有关错误的完整信息(包括原因/修复程序/只要您认为合适)。
答案 3 :(得分:0)
不是从头开始编写自己的API标准,而是采用一种已经可用的标准,例如JSON API标准:
如果您曾与您的团队就JSON响应的格式化方式进行过辩论,那么JSON API可以成为您的防垃圾邮件工具。
通过遵循共享约定,您可以提高生产力,利用通用工具并专注于重要的事情:您的应用程序。
围绕JSON API构建的客户端能够利用其功能有效地缓存响应,有时甚至完全消除了网络请求。
如果您决定使用JSON API,它将具有a section dedicated to errors和a few error examples。
答案 4 :(得分:0)
多年来,许多发达的公司都为错误创建了诸如位掩码之类的东西,因此它们可以在错误内部编码多个变量:
000 - all ok
001 - something failed with X
010 - something failed with Y
011 - something failed with X and Y
100 - something failed with Z
101 - something failed with X and Z
限制是将错误空间限制为您决定编码的字节数,例如16或32个可能的组合,对于您而言是否足够?
您看到这在COM +中很常见 https://docs.microsoft.com/en-us/windows/desktop/com/com-error-codes-1
我希望这会有所帮助。