OData、JsonAPI和GraphQL有什么区别?

42

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

有人可以给我启示吗?


1
GraphQL不是REST的替代品,而是在版本控制可能成为问题时的一种选择。 - Alex Nolasco
2
他们似乎都患有“非我即敌”的症候群,比如认为微软是邪恶的等。 - xumix
1个回答

49

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开发。规范仍然是草案。它相当受React粉丝欢迎,主要与React或Vue.js结合使用。类似于GraphQL的是Falcor,也是相对较新的。

    虽然GraphQL利用HTTP,但它不被认为是REST,而是REST的另一种选择。相反,它利用查询/响应模型转换成单个(虚拟)JSON文档。这种新模型对开发人员而言更加友好,但其优点与REST相比还有待商榷。鉴于它的年轻,生态系统尚未成熟。

为了清晰和完整起见,我将包括OpenAPI在列表中,尽管它不完全是一个API规范。这可能会让一些人感到困惑。OpenAPI标准是一种与语言无关的标准,用于描述和定义API。例如,您的API可以遵循上述标准(排除GraphQL),并使用OpenAPI 3进行文档化。
OpenAPI(又名Swagger):作为OpenAPI倡议和Linux基金会的一部分开发。得到Google、Microsoft、IBM、SAP、Oracle、Ebay和PayPal等大型技术公司的支持。当前版本的规范是3.1.0。有大多数编程语言的实现,以及许多其他工具,如Web UI生成器等。
像OpenAPI这样的规范最好的东西就是围绕它们的工具 - API文档页面的生成器、客户端SDK代码的生成器等。
总的来说,OData和JSON API都是JSON数据格式,它们在数据周围添加了上下文和特性(例如链接),GraphQL是一种完全不同的新方法,用于查询和改变JSON数据,而OpenAPI是声明和记录任何RESTful API的标准方式。
我的个人意见:

正如你所看到的,有许多RESTful规范存在,而不是单一的通用标准。我同意xumix的观点,它们似乎都患有“非此即彼”的综合症。选择以上任何一种的好处都很少,特别是如果你的项目是小型或中型的话。 你的API实现哪个规范是否重要?可能影响不大。只需专注于构建一致且文档良好的API即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接