Json RESTAPI状态是整数还是字符串?

Json RESTAPI状态是整数还是字符串?,json,database,rest,nosql,Json,Database,Rest,Nosql,我和我的同事正在开发RESTAPI。我们一直在争论一个资源/项目的状态应该是字符串还是整数,我们都需要阅读、理解和修改这个资源(使用不同的应用程序)。由于这是一个非常普遍的话题,谷歌没有帮助解决这一争论。我想知道你有什么经验,哪种方法更好 例如,假设我们有作业资源,它可以通过URI访问,并且它具有存储在NoSQL DB中的以下JSON表示: JOB A: { "id": "someid", "name": "somename", "status": "finished" //

我和我的同事正在开发RESTAPI。我们一直在争论一个资源/项目的状态应该是字符串还是整数,我们都需要阅读、理解和修改这个资源(使用不同的应用程序)。由于这是一个非常普遍的话题,谷歌没有帮助解决这一争论。我想知道你有什么经验,哪种方法更好

例如,假设我们有作业资源,它可以通过URI访问,并且它具有存储在NoSQL DB中的以下JSON表示:

JOB A:
{
   "id": "someid",
   "name": "somename",
   "status": "finished"  // or "created", "failed", "compile_error"
}
所以我的问题是-也许它应该更像下面

JOB B:
{
   "id": "someid",
   "name": "somename",
   "status": 0  // or 1, 2, 3, ...
}
在这两种情况下,我们每个人都必须创建一个映射,用于了解应用程序逻辑中的状态。但我自己倾向于第一个,因为它更具可读性。。。您还可以轻松地将'0'(字符串)和0(数字)混合在一起

然而,由于API是由机器使用的,可读性并不那么重要。使用数字还有其他一些优点-在console中使用应用程序时,它被广泛接受,并且在您希望包含任意新的失败状态时,它会非常有用,例如:

  • 状态==50-表示网络组件X出现问题
  • 状态>100-表示一些特殊情况
当你有数字时,你不需要为它们拼凑所有的字符串名称。那么你认为哪种方式最好?也许我们需要多个字段(这可能会让事情变得有点混乱):


就我个人而言,我会结合你提到的两种方法来处理这种情况。我会将状态存储为数据库中的整数,但会创建一个枚举或常量类,将状态名称映射为数值状态值

例如(在C中):

然后,您可以将存储在数据库中的数字状态转换为该枚举的实例,并在整个代码中使用该实例进行决策

例如(在C中):

如果你是学究,你也可以把这些映射存储在你的数据库中

要通过API进行访问,您可以根据自己的需求选择任何一种方式。您甚至可以返回包含状态号和状态文本的结果:

object YourObject
{
    status_code = 0,
    status = "Failed"
}

您还可以创建一个API来从代码中检索状态名称。但是,从性能角度来看,在API中同时返回状态代码和名称是最好的。

感谢分享!是的,这与我正在做的非常相似,只是在Python中:)你的最后一句话给了我一个好主意,让映射也存储在DB中。但主要的问题是“通过API以字符串或整数的形式存储和公开状态”。我在回答的最后包含了一些关于从API返回状态信息的进一步信息。是的,但我们讨论的是其他应用程序的接口。所以灵活性、可扩展性和明确性也很重要。
public enum StatusType
{
    Created = 0,
    Failed = 1,
    Compile_Error = 2,

    // Add any further statuses here.
}
StatusType status = (StatusType) storedStatus;

if(status == StatusType.Created)
{
    // Status is created.
}
else
{
   // Handle any other statuses here.
}
object YourObject
{
    status_code = 0,
    status = "Failed"
}