1. 程式人生 > 其它 >如何為 SAP 電商雲每個不同的 JavaScript Storefront 分別配置 API endpoint

如何為 SAP 電商雲每個不同的 JavaScript Storefront 分別配置 API endpoint

需求

客戶有多個 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 在資料庫和屬性檔案中都配置,值取自資料庫。