Magento2: Bagaimana cara memeriksa apakah permintaan dari Layanan Web?

8

Di Magento 1, Kami biasa memeriksa sebagai:

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

Bagaimana cara memeriksa yang sama di Magento2?

Saya tidak menemukan adaptor yang sesuai yang cocok untuk REST & SOAP.

MagePsycho
sumber
apakah kamu mencari pengamat?
Rakesh Jesadiya
Sebagian besar ini akan diperiksa dari Pengamat.
MagePsycho

Jawaban:

8

Saya dulu Magento\Framework\App\State::getAreaCode()mencari tahu apakah permintaan datang melalui SOAP / REST API.

Anda dapat memeriksa kemungkinan kode area di Magento\Framework\App\Areakelas.

MagePsycho
sumber
1

Silakan periksa dengan kode di bawah ini,

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

$isApirequest = $controller->getRequest()->getControllerModule() == 'Mage_Api';
if ($isApirequest) {
    return;
}
Rakesh Jesadiya
sumber
Tapi di sini masalahnya adalah: ada beberapa API SISA yang dipanggil dari situs web juga.
MagePsycho
0

Saya punya tugas yang sama sekali, dan jika saya ingat dengan benar saya melakukan ini dengan memeriksa apakah \Magento\Framework\App\Request\Http::getFullActionName()sama __. Saya tidak tahu mengapa, tetapi untuk permintaan REST ini akan menjadi nama tindakan lengkap.

Namun, saya tidak menemukan ini aman pada saat itu karena rasanya tidak seperti solusi yang paling benar, jadi saya akhirnya dengan ketat memeriksa string permintaan:

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

Seperti yang mungkin sudah Anda duga, dalam situasi saya, saya harus memeriksa apakah permintaan REST saat ini sangat spesifik.

Saya tidak tahu tentang SOAP, tapi saya berasumsi Anda bisa menggunakan pendekatan yang sama. Namun, itu masih tidak terasa seperti solusi yang tepat.

Giel Berkers
sumber
Ya. Ini tidak akan membantu saya :(
MagePsycho