SynchronousRequestProcessor.php 3.7 KB

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