Лучше всего написать свой собственный JS сервис, который обрабатывает связь с вашей конечной точкой api.
У нас есть абстрактный ApiService
класс, от которого вы можете наследовать. Вы можете взглянуть на CalculatePriceApiService
в качестве примера в платформе . Для вас реализация может выглядеть так:
class MyPluginApiService extends ApiService {
constructor(httpClient, loginService, apiEndpoint = 'my-plugin') {
super(httpClient, loginService, apiEndpoint);
this.name = 'myPluginService';
}
myCustomAction() {
return this.httpClient
.get('my-custom-action', {
headers: this.getBasicHeaders()
})
.then((response) => {
return ApiService.handleResponse(response);
});
}
}
Обратите внимание, что ваша служба api предварительно сконфигурирована для взаимодействия с вашей конечной точкой my-plugin
в первой строке конструктора, что означает, что во всех следующих запросах вы make вы можете использовать относительный путь маршрута.
Имейте также в виду, что абстрактный ApiService позаботится о разрешении конфигурации, используемой для запросов. В частности, это означает, что ApiService будет использовать правильный BaseDomain, включая подпапки, и автоматически использовать apiVersion, который поддерживается вашей версией программного обеспечения. Это означает, что apiVersion, который ApiService использует в маршруте, будет увеличиваться каждый раз, когда будет доступна новая версия api, а это означает, что вам нужно работать с подстановочными знаками в аннотациях вашего внутреннего маршрута для версии api.
необходимо зарегистрировать эту службу. Это задокументировано здесь . Для вас это может выглядеть так:
Shopware.Application.addServiceProvider('myPluginService', container => {
const initContainer = Shopware.Application.getContainer('init');
return new MyPluginApiService(initContainer.httpClient, Shopware.Service('loginService'));
});