是否存在从API构建JSON响应的标准或最佳实践?显然,每个应用程序的数据都是不同的,所以我不太关心,而是“响应样板”,如果你愿意的话。我的意思是:

成功的请求:

{
  "success": true,
  "payload": {
    /* Application-specific data would go here. */
  }
}

失败的请求:

{
  "success": false,
  "payload": {
    /* Application-specific data would go here. */
  },
  "error": {
    "code": 123,
    "message": "An error occurred!"
  }
}

当前回答

是的,出现了一些标准(尽管在标准定义上有些自由):

JSON API-JSON API还包括创建和更新资源,而不仅仅是响应。JSend-简单,可能是您已经在做的事情。OData JSON协议-非常复杂。哈尔-像OData,但目标是像HATEOAS。

还有JSON API描述格式:

大摇大摆JSON模式(swagger使用,但可以单独使用)JSON格式的WADL冲压,冲压HAL,因为理论上HATEOAS是自我描述的。

其他回答

以下是instagram使用的json格式

{
    "meta": {
         "error_type": "OAuthException",
         "code": 400,
         "error_message": "..."
    }
    "data": {
         ...
    },
    "pagination": {
         "next_url": "...",
         "next_max_id": "13872296"
    }
}

JSON的关键在于它是完全动态和灵活的。你可以随心所欲地使用它,因为它只是一组序列化的JavaScript对象和数组,植根于一个节点。

rootnode的类型取决于您,它包含的内容取决于您、是否随响应一起发送元数据取决于您以及是否将mime类型设置为application/json或将其保留为text/plain取决于您(只要您知道如何处理边缘情况)。

构建您喜欢的轻量级模式。就我个人而言,我发现分析跟踪、mp3/ogg服务、图片库服务、在线游戏的短信和网络包、博客帖子和博客评论在发送内容、接收内容以及如何消费方面都有着非常不同的要求。

所以,在完成所有这些工作时,我最不想做的就是让每一个都符合相同的样板标准,该标准基于XML2.0或类似的标准。

也就是说,使用对你有意义且经过深思熟虑的模式有很多值得说的地方。只需阅读一些API响应,注意你喜欢的,批评你不喜欢的,写下这些批评,并理解它们为什么会让你感到不舒服,然后思考如何将你学到的东西应用到你需要的东西上。

JSON-RPC 2.0定义了一种标准的请求和响应格式,在使用REST API之后,它是一股新鲜空气。

除了常识之外,没有违法或非法的标准。如果我们像两个人说话一样抽象这一点,那么标准就是他们在最短时间内用最少的语言准确理解对方的最佳方式。在我们的例子中,“最小单词”是优化带宽以提高传输效率,而“准确理解”是提高解析器效率的结构;这最终导致数据越少,结构越常见;以便它可以穿过针孔并且可以通过公共范围(至少最初)解析。

几乎在所建议的每一种情况下,我都会看到“成功”和“错误”场景的单独响应,这对我来说有点模糊。如果这两种情况下的响应不同,那么为什么我们真的需要在那里设置“成功”标志呢?不存在“错误”是否意味着“成功”?“成功”为TRUE且设置了“错误”时,是否可能有响应?或者,如果没有设置“错误”,则“成功”为FALSE?仅仅一个旗帜是不够的?我更希望只有“错误”标志,因为我相信“错误”比“成功”少。

此外,我们真的应该将“错误”设置为标志吗?如果我想回复多个验证错误怎么办?因此,我发现有一个“Error”节点更有效,每个错误都是该节点的子节点;其中空的(计数为零)“错误”节点表示“成功”。

对于移动开发人员容易理解的web api的最佳响应。

这是“成功”响应

{  
   "code":"1",
   "msg":"Successfull Transaction",
   "value":"",
   "data":{  
      "EmployeeName":"Admin",
      "EmployeeID":1
   }
}

这是“错误”响应

{
    "code": "4",
    "msg": "Invalid Username and Password",
    "value": "",
    "data": {}
}