Magento2: Как проверить, если запрос от веб-службы?

8

В Magento 1 мы использовали для проверки:

if (Mage::getSingleton('api/server')->getAdapter() != null) {
    // request from Web-Service
}

Как проверить то же самое в Magento2?

Я не нашел подходящего адаптера, подходящего как для REST, так и для SOAP.

MagePsycho
источник
ты ищешь наблюдателя?
Ракеш Джесадия
В основном это будет проверено в Observer.
MagePsycho

Ответы:

8

Я использовал, Magento\Framework\App\State::getAreaCode()чтобы узнать, поступает ли запрос через SOAP / REST API.

Вы можете проверить возможные коды города в Magento\Framework\App\Areaклассе.

MagePsycho
источник
1

Пожалуйста, проверьте с кодом ниже,

public function __construct(\Magento\Framework\Event\Observer $observer) {
    $controller = $observer->getControllerAction();
}

$isApirequest = $controller->getRequest()->getControllerModule() == 'Mage_Api';
if ($isApirequest) {
    return;
}
Ракеш Джесадия
источник
Но здесь проблема в том, что есть некоторые REST API, которые также вызываются с сайта.
MagePsycho
0

Однажды у меня была похожая задача, и если я правильно помню, я сделал это, проверив, \Magento\Framework\App\Request\Http::getFullActionName()равно ли __. Я не знаю почему, но для запросов REST это будет полное имя действия.

Однако я не нашел это безопасным в то время, потому что это не было похоже на самое правильное решение, поэтому я в итоге строго проверил строку запроса:

if (
    $this->request->getRequestString() === '/rest/V1/carts/mine/payment-information'
) {
    ...

Как вы уже догадались, в моей ситуации мне пришлось проверить, был ли текущий запрос REST очень специфичным.

Я не знаю о SOAP, но я предполагаю, что вы могли бы использовать аналогичный подход. Тем не менее, это все еще не совсем похоже на правильное решение.

Гиль Беркерс
источник
Да. Это мне не поможет :(
MagePsycho