问题 是否存在错误/错误代码的标准?


我目前正在为国际象棋游戏编写API /一些客户端。

开发人员应该通过一个脚本(xhrframework.php)访问API并通过GET提交操作。他们提交动作时可能会出现一些错误(没有发送PHPSESSID,没有有效的PHPSESSID,移动无效,轮到他们了......)。

所以我想到了如何显示错误的可能性。我提出了一些想法,告诉程序员,他犯了一个错误:

  1. 通过英文清楚的错误信息
    • +:很清楚错误应该是什么意思
    • +:可以添加如何修复此错误的信息
    • - :由于我的英语不是很好,信息可能会改变
    • - :消息的长度差别很大 - 这对C程序员来说可能很重要
  2. 通过英语中的ab错误消息常量 - 类似于WRONG_PHPSESSID,MISSING_PHPSESSID,INVALID_MOVE,NOT_YOUR_TURN,......
    • +:这对人类来说是可以理解的
    • 0:几乎可以肯定消息不会改变
    • - :消息的长度可能略有不同
  3. 通过文档中的一个表的错误代码,程序员可以在其中找到错误代码的含义
    • +:错误代码将是常量
    • +:每个错误代码的长度可能相同
    • - :这很神秘

我认为第三个解决方案可能是一个好主意,因为xhrframework.php只能由程序员访问,而程序员很可能已经看过API文档。

现在我想知道是否存在Web-API-Error消息的标准。其他人(例如谷歌地图API)如何解决这个问题?我应该只输出一个内容为“ERROR:004”或没有填充“ERROR:4”的空白页面吗?

哪个错误应该得到哪些数字?根据数字对错误进行分组是否有意义,例如:所有以1开头的错误都是认证错误,所有错误都有两个游戏逻辑错误?从错误1开始并使用每个数字会更好吗?

Google Maps API

如果我做了 错误的电话 对于谷歌地图JS-API,它返回Java脚本,并带有明确的德语消息(我想我住在德国)。

如果我制作了一个,那么Google Static Maps API会以明文英文的形式返回一条消息 错误的电话


7018
2017-11-09 15:25


起源

我只知道这个: en.wikipedia.org/wiki/HRESULT - Flo
谢谢弗洛。由于我没有在/为Windows机器编程,这对我没什么帮助,但它让我知道如何构造自定义错误消息。我之前没想过在我的错误代码中添加严重性。 - Martin Thoma
或者,对于世界上非MS的一半,我们[en.wikipedia.org/wiki/Errno.h] - Nicholas Wilson


答案:


大多数API服务都遵循HTTP错误代码系统 RFC2817 包含不同类型错误的错误代码范围:

1xx: Informational - Request received, continuing process 
2xx: Success - The action was successfully received, understood, and accepted 
3xx: Redirection - Further action must be taken in order to complete the request 
4xx: Client Error - The request contains bad syntax or cannot be fulfilled 
5xx: Server Error - The server failed to fulfil an apparently valid request

在API上下文中,您通常会使用4xx值来表示与请求验证有关的错误条件。 49x通常用于安全错误情况。


14
2018-05-15 10:05





没有标准,为什么会这样?使用您的界面的程序员必须要了解这一点,这可能是自定义的,因此需要编写自定义错误处理代码只是程序包的一部分。

我建议你制作一个你会坚持的合理格式。你可以选择每个世界中最好的东西,并在你返回的内容中包含几条信息,或许沿着这些方向:

[one of "ERROR" or "WARNING" or "MESSAGE"]
[error code with no spaces, eg "BAD_MOVE"]
[optional human readable string]

这样,如果发明旧的客户不理解的新错误类型,他们仍然可以识别返回以“错误”开始并且知道出错了;通过解析错误代码(不使用整数,浪费每个人的时间),如果程序员考虑到错误,他们可以采取适当的行动。最后,如果您为选定的错误添加一个友好的字符串,它可以很容易地向用户呈现一些不错的东西或者有助于调试。


1
2017-11-12 12:36