在Spartacus Storefront中集成定制的API



我们的Hybris实例有一些自定义的RESTAPI,例如addEntry。这个版本的API在有效负载中需要一个额外的布尔参数,让我们将其称为fooBar。这里有一个有效载荷的例子:

{"quantity": 1, "product": {"code": "1234567"}, "fooBar": false}

以下是我们所做的工作列表,以便在实际进行http调用的服务中有这个额外的参数:

  • 重写AddToCartComponent
    • 修改addToCart方法,该方法将fooBar参数传递给E2ActiveCartServiceaddEntry
  • E2ActiveCartService中的扩展ActiveCartService
    • 修改了将fooBar参数传递给E2MultiCartServiceaddEntry方法的addEntry
  • 扩展了E2MultiCartService
    • 中的MultiCartService修改了addEntry方法,该方法将fooBar参数传递到E2CartAddEntry
  • 实现了具有自己类型的CartAddEntry操作(称为E2CartAddEntry(的副本(即"[E2 Cart entry]Add entry">(
  • 实现了一个新的CartEntryEffects(称为E2CartEntryEffects(,该功能可监听E2CartAddEntry操作
    • 创建了第二个名为processesIncrement$的效果,用于调度CartActions.CartProcessesIncrement操作(我们这样做是因为E2CartAddEntry无法扩展EntityProcessesIncreamentAction类(
    • 复制了原始CartEntryEffects中的addEntry$效果,并将fooBar参数添加到E2CartEntryConnectoradd方法
  • E2CartEntryConnector
    • 中扩展CartEntryCnnector修改了add方法,该方法将fooBar参数传递到E2CartEntryAdapter的add方法
  • E2CartEntryAdapter
    • 中扩展了CartEntryAdapter修改了抽象的add方法,添加了fooBar参数
  • 创建E2OccCartEntryAdapter,扩展OccCartEntryAdapter并实现E2CartEntryAAdapter
    • 修改add方法,将fooBar添加到HttpClient发出的POST调用的有效负载
  • 最后,在我们的主模块中,我们更改了提供者:
  • [
    { provide: ActiveCartService, useClass: E2ActiveCartService },
    { provide: MultiCartService, useClass: E2MultiCartService },
    E2CartEntryEffects,
    { provide: CartEntryConnector, useClass: E2CartEntryConnector },
    { provide: E2CartEntryAdapter, useClass: E2OccCartEntryAdapter },
    ]
    

    这个解决方案似乎有效,但我们认为对于相对简单的更改来说,这相当复杂,我们想知道我们的方法是否正确,或者是否有更好、更清洁的方法。

    问候

    目前,这似乎是这个特定用例的正确方式。

    您没有确切地指定fooBar的用途,但我认为,它已被使用,并且可以在顶层(UI组件中(内切换,并且必须由所有其他层向下传递到适配器。

    另一方面,例如,如果fooBar只是Product模型的一个属性,那么这将是一个只扩展"产品"模型+重要位置(组件、适配器(的更改的问题,所有其他位置都可以保持不变(只通过扩展模型(。

    你能提供更多关于所需更改的上下文吗,这样我们就能更好地理解它,并在未来更容易?

    在不久的将来,我们正在考虑通过Spartacus中的所有层统一我们的facade服务的有效负载,因此向任何核心逻辑添加更多上下文将大大简化(基本上可以归结为第二个示例,关于扩展Product模型(。

    最新更新