天天看点

SAP Spartacus OccEndpointsService getUrl方法的实现原理

源代码:

/**

  * Returns a fully qualified OCC Url (including baseUrl and baseSite)

  * @param endpoint Name of the OCC endpoint key config

  * @param urlParams  URL parameters

  * @param queryParams Query parameters

  * @param scope

  */

 getUrl(

   endpoint: string,

   urlParams?: object,

   queryParams?: object,

   scope?: string

 ): string {

   endpoint = this.getEndpointForScope(endpoint, scope);

   if (urlParams) {

     Object.keys(urlParams).forEach((key) => {

       urlParams[key] = encodeURIComponent(urlParams[key]);

     });

     endpoint = DynamicTemplate.resolve(endpoint, urlParams);

   }

   if (queryParams) {

     let httpParamsOptions = { encoder: new HttpParamsURIEncoder() };

     if (endpoint.includes('?')) {

       let queryParamsFromEndpoint;

       [endpoint, queryParamsFromEndpoint] = endpoint.split('?');

       httpParamsOptions = {

         ...httpParamsOptions,

         ...{ fromString: queryParamsFromEndpoint },

       };

     }

     let httpParams = new HttpParams(httpParamsOptions);

     Object.keys(queryParams).forEach((key) => {

       const value = queryParams[key];

       if (value !== undefined) {

         if (value === null) {

           httpParams = httpParams.delete(key);

         } else {

           httpParams = httpParams.set(key, value);

         }

       }

     const params = httpParams.toString();

     if (params.length) {

       endpoint += '?' + params;

   return this.getEndpoint(endpoint);

 }

入口:

SAP Spartacus OccEndpointsService getUrl方法的实现原理
SAP Spartacus OccEndpointsService getUrl方法的实现原理
SAP Spartacus OccEndpointsService getUrl方法的实现原理

一个具体的例子:

https://spartacus-dev0.eastus.cloudapp.azure.com:9002/occ/v2/electronics-spa/products/300938?fields=code,name,summary,price(formattedValue),images(DEFAULT,galleryIndex)&lang=en&curr=USD

从浏览器里得到的结果:

SAP Spartacus OccEndpointsService getUrl方法的实现原理

继续阅读