OData,JsonAPI,GraphQL有什么区别?

时间:2017-06-23 00:12:04

标签: odata graphql json-api

我在职业生涯中使用过OData,现在很少有来自不同团队的同事建议我们转向JsonAPI和GraphQL,因为它与微软无关。我对这两种查询语言都没有多少经验。据我所知,OData是Salesforce,IBM,Microsoft使用的标准,它非常成熟。为什么要切换到JsonAPI和/或GraphQL?有真正的好处吗? JsonAPI和GraphQL是新标准吗?基于流行度改变公共api实现似乎没有用,特别是在没有大的好处时。

有人可以赐教我吗?

1 个答案:

答案 0 :(得分:12)

OData是与JSON API类似的规范。它们都描述了创建和使用RESTful API的标准。 GraphQL是一种新的API设计方法,它指定了一种查询API资源的不同方法。

  • OData :自2007年起在Microsoft设计和开发,由OASIS联盟标准化。最新版本V4作为国际标准提交ISO / IEC JTC 1批准。技术委员会(TC)的公司包括CA Technologies,Citrix,IBM,Microsoft,Progress,Red Hat,SAP和SDL。

    有许多流行的编程语言库 - .NET,Java,JavaScript,PHP和Ruby。规范允许动态资源,并且有一个服务文档,列出了客户端要发现的所有API端点。此外,还有一个描述架构的元数据文档。

  • JSON API :JSON API最初由Yehuda Katz于2013年5月起草。此初稿摘自Ember Data的REST适配器隐式定义的JSON传输。该规范的当前稳定版本为1.0。 JSON API规范是针对客户端和服务器端的大多数编程语言实现的。

    JSON API通过JSON文档中的link属性支持HATEOAS。其他功能包括分页,排序,过滤和关系。 JSON API服务器生成的JSON文档非常冗长,具有大量嵌套属性。

  • GraphQL :自2015年起在Facebook开发。specification仍然是一份工作草案。它在React粉丝中很受欢迎,主要与React或Vue.js结合使用。与GraphQL类似的是Falcor,它也是相对较新的。

    虽然GraphQL使用HTTP,但它不被视为REST,而是REST的替代方案。相反,它将查询/响应模型用于单个(虚拟)JSON文档。这个新模型对于开发人员来说有点好处,但它对REST的好处值得商榷。鉴于其年龄较小,生态系统尚未成熟。

为了清晰和完整起见,我将OpenAPI包含在列表中,尽管它不完全是API规范。这可能会让一些人感到困惑。 OpenAPI标准是一种与语言无关的标准,用于描述和定义API。您的API可以遵循上述标准之一(不包括GraphQL),也可以使用Swagger 3进行记录。

  • OpenAPI(a.k.a. Swagger):作为OpenAPI Initiative和Linux基金会的一部分开发。得到了谷歌,微软,IBM,SAP,甲骨文,Ebay和PayPal等大型科技公司的支持。该规范的当前版本为3.0.1。有大多数编程语言的实现,以及许多其他工具,如Web UI生成器等。

Swagger等规格的最佳功能是它们周围的工具 - 用于API文档页面的生成器,用于客户端SDK代码的生成器等。

此标准可能是目前API文档和代码生成中最常用的标准。它的API网关(仅限v2)中的Amazon Web Services等云提供商也支持它。

我个人意见:

正如您所看到的,那里有很多RESTful规范,而不是单一的通用标准。我同意xumix在这里 - 他们似乎都受到了'#34;未在这里发明'#34;综合征。选择上述任何一项的好处都很小,特别是如果你的项目是中小型的。 您的API实现的规范是否重要?可能不多。只需专注于构建一致且记录良好的API。