1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Webapi\Controller\Rest;
use Magento\Framework\Webapi\Rest\Response as RestResponse;
use Magento\Framework\Webapi\ServiceOutputProcessor;
use Magento\Framework\Webapi\Rest\Response\FieldsFilter;
use Magento\Framework\App\DeploymentConfig;
use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\Config\ConfigOptionsListConstants;
/**
* REST request processor for synchronous requests
*/
class SynchronousRequestProcessor implements RequestProcessorInterface
{
const PROCESSOR_PATH = "/^\\/V\\d+/";
/**
* @var RestResponse
*/
private $response;
/**
* @var InputParamsResolver
*/
private $inputParamsResolver;
/**
* @var ServiceOutputProcessor
*/
private $serviceOutputProcessor;
/**
* @var FieldsFilter
*/
private $fieldsFilter;
/**
* @var \Magento\Framework\App\DeploymentConfig
*/
private $deploymentConfig;
/**
* @var ObjectManagerInterface
*/
private $objectManager;
/**
* Initial dependencies
*
* @param \Magento\Framework\Webapi\Rest\Response $response
* @param \Magento\Webapi\Controller\Rest\InputParamsResolver $inputParamsResolver
* @param \Magento\Framework\Webapi\ServiceOutputProcessor $serviceOutputProcessor
* @param \Magento\Framework\Webapi\Rest\Response\FieldsFilter $fieldsFilter
* @param \Magento\Framework\App\DeploymentConfig $deploymentConfig
* @param \Magento\Framework\ObjectManagerInterface $objectManager
*/
public function __construct(
RestResponse $response,
InputParamsResolver $inputParamsResolver,
ServiceOutputProcessor $serviceOutputProcessor,
FieldsFilter $fieldsFilter,
DeploymentConfig $deploymentConfig,
ObjectManagerInterface $objectManager
) {
$this->response = $response;
$this->inputParamsResolver = $inputParamsResolver;
$this->serviceOutputProcessor = $serviceOutputProcessor;
$this->fieldsFilter = $fieldsFilter;
$this->deploymentConfig = $deploymentConfig;
$this->objectManager = $objectManager;
}
/**
* {@inheritdoc}
*/
public function process(\Magento\Framework\Webapi\Rest\Request $request)
{
$inputParams = $this->inputParamsResolver->resolve();
$route = $this->inputParamsResolver->getRoute();
$serviceMethodName = $route->getServiceMethod();
$serviceClassName = $route->getServiceClass();
$service = $this->objectManager->get($serviceClassName);
/**
* @var \Magento\Framework\Api\AbstractExtensibleObject $outputData
*/
$outputData = call_user_func_array([$service, $serviceMethodName], $inputParams);
$outputData = $this->serviceOutputProcessor->process(
$outputData,
$serviceClassName,
$serviceMethodName
);
if ($request->getParam(FieldsFilter::FILTER_PARAMETER) && is_array($outputData)) {
$outputData = $this->fieldsFilter->filter($outputData);
}
$header = $this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT);
if ($header) {
$this->response->setHeader('X-Frame-Options', $header);
}
$this->response->prepareResponse($outputData);
}
/**
* {@inheritdoc}
*/
public function canProcess(\Magento\Framework\Webapi\Rest\Request $request)
{
if (preg_match(self::PROCESSOR_PATH, $request->getPathInfo()) === 1) {
return true;
}
return false;
}
}