如何为 SAP 电商云每个不同的 JavaScript Storefront 分别配置 API endpoint

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

需求

客户有多个 JS 店面,并希望将每个店面连接到不同的 API 端点,但默认情况下,所有 JS 店面都绑定到同一个 API。

当前的实现

除非显式配置 OCC 基本 URL,否则云门户(Cloud Portal)中的 第一个 API 端点将是与每个 JS Storefront 关联的端点。

解决方案

每个 JS Storefront 应用程序都应该使用 index.html 中的元标记明确定义 OCC 基本 URL,例如下面的代码:

<meta name="occ-backend-base-url" content="https://my-custom-backend-url:8080" />
复制代码

开发人员可以使用特殊的 HTML 元标记配置基本 URL,而不是在 Spartacus 配置中使用 provideConfig() 对其进行硬编码。 这允许您仅使用一个已编译的 JavaScript 应用程序就可以部署到不同的环境,因为您只需为每个环境修改 index.html 文件的元标记。

app.module.ts 中的 provideConfig() 中 backend.occ.baseUrl 的值优先于 meta 标签中的值,因此如果客户希望 base URL 由 meta 标签动态驱动,请不要定义 provideConfig() 中的 baseUrl。

实际项目中一个常见的问题是,Spartacus 意外通过公共网络而不是内部向 API 服务发送请求。

下列是正常的请求:

https://api.<project-name>-<customer-name>-<environment-id>-public.model-t.cc.commerce.ondemand.com/occ/v2

下列是错误的请求:

https://api.<customer-domain>.com/occ/v2

引起这个错误的原因是,由于理解错误,occ-backend-base-url 的值被不正确的修改/自定义。

下面是一个错误的实现:

<meta name="occ-backend-base-url" content=https://api.<customer-domain>.com/occ/v2 />
复制代码

正确实现:

<meta name="occ-backend-base-url" content="OCC_BACKEND_BASE_URL_VALUE" />
复制代码

只有使用正确的占位符 OCC_BACKEND_BASE_URL_VALUE,在部署到 CCV2 时,这个占位符才能被 API aspect 中的实际的 API endpoint 正确地替换。

有两种配置为 Spartacus 配置 CORS 的方式。

方式1:Local Properties Configuration

通过 hac、服务配置或 manifest.json 引用的属性文件更改属性。

方式2:Global CORS configuration

在 Backoffice 配置:

第二种配置具有更高的优先级。逻辑在 de.hybris.platform.core.cors.web.DefaultCorsConfigurationSource 中实现, 代码如下

全局 CORS 配置存储在 CorsConfigurationProperty 项内的数据库中。 这是全局并适用于连接到集群的所有节点。

数据库中的属性优先于本地属性。 如果有相同的属性 context 和 key 在数据库和属性文件中都配置,值取自数据库。

猜你喜欢

转载自juejin.im/post/7110771317586001950