Magento2:リクエストがWebサービスからのものかどうかを確認する方法


8

Magento 1では、以前は次のようにチェックしていました。

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

Magento2で同じことを確認する方法は?

RESTとSOAPの両方に適合する適切なアダプターが見つかりませんでした。


オブザーバーを探していますか?
Rakesh Jesadiya 2017年

ほとんどの場合、これはObserverからチェックされます。
MagePsycho 2017年

回答:


8

Magento\Framework\App\State::getAreaCode()リクエストがSOAP / REST API経由かどうかを確認するために使用しました。

Magento\Framework\App\Areaクラスで可能な市外局番を確認できます。


1

以下のコードで確認してください、

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

$isApirequest = $controller->getRequest()->getControllerModule() == 'Mage_Api';
if ($isApirequest) {
    return;
}

しかし、ここでの問題は、Webサイトからも呼び出されるREST APIがいくつかあることです。
MagePsycho 2017年

0

私は同じような仕事を一度しました、そして私が正しく覚えているなら、\Magento\Framework\App\Request\Http::getFullActionName()等しいかどうかをチェックすることでこれを行い__ました 理由はわかりませんが、RESTリクエストの場合、これは完全なアクション名になります。

ただし、最も安全な解決策とは思えなかったため、この時点では安全とは言えなかったため、リクエスト文字列を厳密に確認することにしました。

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

ご想像のとおり、私の状況では、現在のRESTリクエストが非常に具体的なリクエストかどうかを確認する必要がありました。

SOAPについては知りませんが、同様のアプローチを使用できると思います。ただし、それでも適切な解決策とは言えません。


うん。これは私には役立ちません:(
MagePsycho 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.