SchemaRequestProcessor.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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\Webapi\Model\Rest\Swagger\Generator;
  9. use Magento\Framework\Webapi\Rest\Response as RestResponse;
  10. use Magento\Framework\Webapi\Request;
  11. /**
  12. * REST request processor for synchronous "schema" requests
  13. */
  14. class SchemaRequestProcessor implements RequestProcessorInterface
  15. {
  16. const PROCESSOR_PATH = 'schema';
  17. /**
  18. * @var \Magento\Webapi\Model\Rest\Swagger\Generator
  19. */
  20. private $swaggerGenerator;
  21. /**
  22. * @var \Magento\Framework\Webapi\Rest\Response
  23. */
  24. private $response;
  25. /**
  26. * Initial dependencies
  27. *
  28. * @param \Magento\Webapi\Model\Rest\Swagger\Generator $swaggerGenerator
  29. * @param \Magento\Framework\Webapi\Rest\Response $response
  30. */
  31. public function __construct(
  32. Generator $swaggerGenerator,
  33. RestResponse $response
  34. ) {
  35. $this->swaggerGenerator = $swaggerGenerator;
  36. $this->response = $response;
  37. }
  38. /**
  39. * {@inheritdoc}
  40. */
  41. public function process(\Magento\Framework\Webapi\Rest\Request $request)
  42. {
  43. $requestedServices = $request->getRequestedServices('all');
  44. $requestedServices = $requestedServices == Request::ALL_SERVICES
  45. ? $this->swaggerGenerator->getListOfServices()
  46. : $requestedServices;
  47. $responseBody = $this->swaggerGenerator->generate(
  48. $requestedServices,
  49. $request->getScheme(),
  50. $request->getHttpHost(false),
  51. $request->getRequestUri()
  52. );
  53. $this->response->setBody($responseBody)->setHeader('Content-Type', 'application/json');
  54. }
  55. /**
  56. * {@inheritdoc}
  57. */
  58. public function canProcess(\Magento\Framework\Webapi\Rest\Request $request)
  59. {
  60. if (strpos(ltrim($request->getPathInfo(), '/'), self::PROCESSOR_PATH) === 0) {
  61. return true;
  62. }
  63. return false;
  64. }
  65. }