OData、JsonAPI、GraphQL 之间有什么区别?
What is the difference between OData, JsonAPI, GraphQL?
我在我的职业生涯中已经使用了相当多的 OData,现在来自不同团队的同事中很少有人建议我们转向 JsonAPI 和 GraphQL,因为它与 Microsoft 无关。我对这两种查询语言都没有太多经验。据我所知,OData 是 Salesforce、IBM、Microsoft 使用的标准,它非常成熟。为什么要切换到 JsonAPI and/or GraphQL?有真正的好处吗? JsonAPI 和 GraphQL 是新标准吗?根据受欢迎程度更改 public api 实现似乎毫无用处,尤其是在没有太大好处的情况下。
谁能赐教吗?
OData 是与 JSON API 类似的规范。它们都描述了创建和使用 RESTful API 的标准协议。 GraphQL 是一种完全不同的 API 设计方法,并指定了一种不同的查询 API 资源的方式。
OData:自 2007 年起在 Microsoft 设计和开发,由 OASIS consortium. The latest version 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 月起草. 此初稿是从 JSON 传输中提取的,该传输由 Ember Data 的 REST 适配器隐式定义。该规范的当前稳定版本是 1.0。 JSON API 规范适用于大多数编程语言,包括客户端和服务器端。
JSON API 通过 JSON 文档中的 link
属性 支持 HATEOAS。其他功能包括分页、排序、过滤和关系。 JSON JSON API 服务器生成的文档非常冗长,有很多嵌套属性。
GraphQL:自 2015 年以来在 Facebook 开发。specification 仍然是一个工作草案。它在 React 爱好者中颇受欢迎,主要与 React 或 Vue.js 结合使用。和GraphQL类似的还有Falcor,也是比较新的
虽然 GraphQL 使用 HTTP,但它不被视为 REST,而是 REST 的替代品。相反,它将 query/response 模型用于单个(虚拟)JSON 文档。这种新模型对开发人员来说更好用,但它相对于 REST 的优势值得商榷。鉴于其年轻,生态系统尚未成熟。
为了清楚和完整起见,我将 OpenAPI 添加到列表中,尽管它不完全是 API 规范。这可能会让一些人感到困惑。 OpenAPI 标准是一种与语言无关的标准,用于描述和定义 APIs。例如,您的 API 可以遵循上述标准之一(不包括 GraphQL),并且还可以使用 OpenAPI 3 进行记录。
- OpenAPI (a.k.a.Swagger):作为 OpenAPI Initiative and the Linux Foundation. Supported by big tech companies like Google, Microsoft, IBM, SAP, Oracle, Ebay and PayPal. The current version of the spec is 3.1.0 的一部分开发。大多数编程语言都有实现,还有许多其他工具,如网络 UI 生成器等
使用 OpenAPI 等规范获得的最好的东西是围绕它们的工具 - API 文档页面的生成器、客户端 SDK 代码的生成器等。
这个标准可能是当今最常用于 API 声明、文档和代码生成的标准。它也得到云提供商的支持,例如 Amazon Web Services 在其 API 网关中。
总而言之,OData 和 JSON API 都是 JSON 数据格式,它们在您的数据周围添加上下文和特征(例如链接),GraphQL 是一种完全不同的新方法查询和修改 JSON 数据,OpenAPI 是声明和记录任何 RESTful API.
的标准方式
个人意见:
如您所见,有相当多的 RESTful 规范,而不是单一的通用标准。我在这里同意 xumix - 他们似乎都患有“非这里发明”综合症。选择以上任何一项的好处都很小,特别是如果您的项目是小型或中型的。
您的 API 实施哪个规范重要吗?可能不多。只需专注于构建一致且有据可查的 API.
我在我的职业生涯中已经使用了相当多的 OData,现在来自不同团队的同事中很少有人建议我们转向 JsonAPI 和 GraphQL,因为它与 Microsoft 无关。我对这两种查询语言都没有太多经验。据我所知,OData 是 Salesforce、IBM、Microsoft 使用的标准,它非常成熟。为什么要切换到 JsonAPI and/or GraphQL?有真正的好处吗? JsonAPI 和 GraphQL 是新标准吗?根据受欢迎程度更改 public api 实现似乎毫无用处,尤其是在没有太大好处的情况下。
谁能赐教吗?
OData 是与 JSON API 类似的规范。它们都描述了创建和使用 RESTful API 的标准协议。 GraphQL 是一种完全不同的 API 设计方法,并指定了一种不同的查询 API 资源的方式。
OData:自 2007 年起在 Microsoft 设计和开发,由 OASIS consortium. The latest version 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 月起草. 此初稿是从 JSON 传输中提取的,该传输由 Ember Data 的 REST 适配器隐式定义。该规范的当前稳定版本是 1.0。 JSON API 规范适用于大多数编程语言,包括客户端和服务器端。
JSON API 通过 JSON 文档中的
link
属性 支持 HATEOAS。其他功能包括分页、排序、过滤和关系。 JSON JSON API 服务器生成的文档非常冗长,有很多嵌套属性。GraphQL:自 2015 年以来在 Facebook 开发。specification 仍然是一个工作草案。它在 React 爱好者中颇受欢迎,主要与 React 或 Vue.js 结合使用。和GraphQL类似的还有Falcor,也是比较新的
虽然 GraphQL 使用 HTTP,但它不被视为 REST,而是 REST 的替代品。相反,它将 query/response 模型用于单个(虚拟)JSON 文档。这种新模型对开发人员来说更好用,但它相对于 REST 的优势值得商榷。鉴于其年轻,生态系统尚未成熟。
为了清楚和完整起见,我将 OpenAPI 添加到列表中,尽管它不完全是 API 规范。这可能会让一些人感到困惑。 OpenAPI 标准是一种与语言无关的标准,用于描述和定义 APIs。例如,您的 API 可以遵循上述标准之一(不包括 GraphQL),并且还可以使用 OpenAPI 3 进行记录。
- OpenAPI (a.k.a.Swagger):作为 OpenAPI Initiative and the Linux Foundation. Supported by big tech companies like Google, Microsoft, IBM, SAP, Oracle, Ebay and PayPal. The current version of the spec is 3.1.0 的一部分开发。大多数编程语言都有实现,还有许多其他工具,如网络 UI 生成器等
使用 OpenAPI 等规范获得的最好的东西是围绕它们的工具 - API 文档页面的生成器、客户端 SDK 代码的生成器等。
这个标准可能是当今最常用于 API 声明、文档和代码生成的标准。它也得到云提供商的支持,例如 Amazon Web Services 在其 API 网关中。
总而言之,OData 和 JSON API 都是 JSON 数据格式,它们在您的数据周围添加上下文和特征(例如链接),GraphQL 是一种完全不同的新方法查询和修改 JSON 数据,OpenAPI 是声明和记录任何 RESTful API.
的标准方式个人意见:
如您所见,有相当多的 RESTful 规范,而不是单一的通用标准。我在这里同意 xumix - 他们似乎都患有“非这里发明”综合症。选择以上任何一项的好处都很小,特别是如果您的项目是小型或中型的。 您的 API 实施哪个规范重要吗?可能不多。只需专注于构建一致且有据可查的 API.