在Drupal Commerce中扩展JSON:API支持 - Centarro

作者:API传播员 · 2025-12-24 · 阅读时间:4分钟
本文详细介绍了在Drupal Commerce中扩展JSON:API支持的方法,包括产品列表检索、购物车操作和结账功能,通过自定义资源路由简化了API开发,提升了系统的灵活性和可扩展性。长尾关键词包括Drupal Commerce JSON:API扩展和Centarro Commerce API模块。

在Drupal Commerce中扩展JSON:API支持

在电子商务领域,创新是推动增长的关键。许多企业在使用Drupal时,通常会采用全栈架构,既负责前端也负责后端。然而,随着业务的不断发展,企业可能需要解耦前端,以提升性能或打造独特的客户体验。此外,企业还需要将Centarro Commerce的数据暴露给其他业务系统,以支持运营需求。

设计HTTP API时,我们综合考虑了数据模型的各个方面,以及前端应用程序与之交互的方式。以下是我们希望实现的主要功能:

  • 产品列表检索:支持Commerce框架的动态定价功能,例如基于客户类型或货币的价目表。
  • 购物车操作:允许API消费者将产品添加到购物车,而无需了解商店的具体细节,例如是否使用现有购物车或创建新购物车。
  • 购物车管理权限:限制API消费者只能修改当前客户购物车的特定元素(如订单项目数量),而不能执行管理任务或操作其他用户的订单。
  • 结账和收款:收集发货和账单信息以完成交易。

JSON标准化:API规范

早在2018年,我们发布了Commerce Cart API模块,该模块通过Drupal核心的RESTful Web服务模块提供购物车的HTTP HTTP API奠定了基础。

使用核心RESTful Web服务模块时,我们发现了一些挑战:

  • 需要为数据模型定义自定义的请求和响应模式。
  • 需要编写自定义的数据规范化器,以处理关系和复杂字段值的表示。

通过采用Drupal的JSON:API模块,我们能够专注于API与Commerce数据模型交互的机制,而无需完全重新定义JSON的表示方式。值得一提的是,JSON:API模块在Drupal 8.7版本中成为核心模块。关于这一历程,Drupal项目负责人Dries Buytaert撰写了一篇精彩的概述。

我们的Commerce API模块基于JSON:API模块进行了扩展,创建了自定义资源路由,用于提供购物车和结账API。这种方式让我们无需重新发明数据返回的方法,而是将精力集中在为Commerce开发人员提供更友好的接口上,数据处理部分则交由JSON:API模块完成。


当前版本的功能与未来展望

目前,我们利用实体API来处理账单和发货信息。这些信息存储在相关的实体中,例如:

  • 账单信息:存储在配置文件实体中,并由订单或付款方式引用。
  • 发货信息:同样存储在配置文件实体中,并由发货引用。

为了简化数据输入,我们在订单中添加了伪属性“billing_information”和“shipping_information”。通过这些伪属性,API消费者可以直接通过订单API请求创建或修改这些配置文件,而无需手动创建实体并填充引用。这种方式既简化了操作,又隐藏了数据模型的内部复杂性。


如何体验?

如果您想亲自体验,我们提供了一个React演示应用程序,您可以通过以下链接访问:
Centarro Commerce React 演示

未来,我们还计划在GitHub上发布示例React应用程序,敬请期待!


总结

通过扩展JSON:API支持,Centarro Commerce为开发人员提供了更强大的工具,简化了与数据模型的交互,同时提升了系统的灵活性和可扩展性。无论是优化前端性能,还是集成其他业务系统,这些改进都为企业提供了更多可能性。

如果您对我们的工作感兴趣,欢迎在DrupalCon的Centarro展位与我们交流!

原文链接: https://www.centarro.io/blog/expanding-jsonapi-support-drupal-commerce