While SOAP and REST share similarities over the HTTP protocol. In this article, we will discuss Web API REST and Web API SOAP.
webapi_rest | <module-dir>/etc/webapi_rest/events.xml | An observer will be executed in the Web API REST area only. |
webapi_soap | <module-dir>/etc/webapi_soap/events.xml | An observer will be executed in the web API SOAP area only. |
Step 1: You need to create a file in your custom module app/code/{vendor}/{module}/etc/extension_attributes.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd"> <extension_attributes for="Magento\Sales\Api\Data\OrderInterface"> <attribute code="seller" type="string" /> </extension_attributes> </config>
Step 2: Create observe.In this step, you need to create observer for event ‘sales_order_load_after’ through the file {vendor}/{module}/etc/webapi_rest/events.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_load_after"> <observer name="sales_order_load_order_attribute" instance="{Vendor}\{Module}\Observer\Sales\OrderLoadAfter" /> </event> </config>
Step 3: Create a file to handle this event.Create a file {vendor}/{module}/Observer/Sales/OrderLoadAfter.php to handle the event ‘sales_order_load_after’ which is declared above
<?php namespace {Vendor}\{Module}\Observer\Sales; use Magento\Framework\Event\ObserverInterface; class OrderLoadAfter implements ObserverInterface { public function execute(\Magento\Framework\Event\Observer $observer) { $order = $observer->getOrder(); $extensionAttributes = $order->getExtensionAttributes(); if ($extensionAttributes === null) { $extensionAttributes = $this->getOrderExtensionDependency(); } $seller='test';//add your custom logic for seller. $extensionAttributes->setSeller($seller); $order->setExtensionAttributes($extensionAttributes); } private function getOrderExtensionDependency() { $orderExtension = \Magento\Framework\App\ObjectManager::getInstance()->get( '\Magento\Sales\Api\Data\OrderExtension' ); return $orderExtension; } }