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

注销發表於2022-05-19

需求

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

相關文章