queryParser = $queryParser ?: ObjectManager::getInstance()->get(QueryParser::class); } /** * Check if request is using correct verb for query or mutation * * @param HttpRequestInterface $request * @return void * @throws GraphQlInputException */ public function validate(HttpRequestInterface $request): void { /** @var Http $request */ if (false === $request->isPost()) { $query = $request->getParam('query', ''); if (!empty($query)) { $operationType = ''; $parsedQuery = $this->queryParser->parse($query); Visitor::visit( $parsedQuery, [ 'leave' => [ NodeKind::OPERATION_DEFINITION => function (Node $node) use (&$operationType) { $operationType = $node->operation; } ] ] ); if ($operationType !== null && strtolower($operationType) === 'mutation') { throw new GraphQlInputException( new Phrase('Mutation requests allowed only for POST requests') ); } } } } }