Server: minor improvements

This commit is contained in:
Vladimir Razuvaev 2017-08-18 02:54:35 +07:00
parent d578b8a22f
commit 83cc9132a0
5 changed files with 25 additions and 33 deletions

View File

@ -83,6 +83,9 @@ class Helper
private function promiseToExecuteOperation(PromiseAdapter $promiseAdapter, ServerConfig $config, OperationParams $op, $isBatch = false)
{
try {
if (!$config->getSchema()) {
throw new InvariantViolation("Schema is required for the server");
}
if ($isBatch && !$config->getQueryBatching()) {
throw new RequestError("Batched queries are not supported by this server");
}
@ -117,7 +120,7 @@ class Helper
$this->resolveContextValue($config, $op, $doc, $operationType),
$op->variables,
$op->operation,
$config->getDefaultFieldResolver(),
$config->getFieldResolver(),
$this->resolveValidationRules($config, $op, $doc, $operationType)
);

View File

@ -58,6 +58,7 @@ class OperationParams
'query' => null,
'queryid' => null,
'documentid' => null, // alias to queryid
'id' => null, // alias to queryid
'operation' => null,
'variables' => null
];
@ -70,7 +71,7 @@ class OperationParams
}
$instance->query = $params['query'];
$instance->queryId = $params['queryid'] ?: $params['documentid'];
$instance->queryId = $params['queryid'] ?: $params['documentid'] ?: $params['id'];
$instance->operation = $params['operation'];
$instance->variables = $params['variables'];
$instance->readOnly = (bool) $readonly;

View File

@ -67,7 +67,7 @@ class ServerConfig
/**
* @var callable
*/
private $defaultFieldResolver;
private $fieldResolver;
/**
* @var PromiseAdapter
@ -223,18 +223,18 @@ class ServerConfig
/**
* @return callable
*/
public function getDefaultFieldResolver()
public function getFieldResolver()
{
return $this->defaultFieldResolver;
return $this->fieldResolver;
}
/**
* @param callable $defaultFieldResolver
* @param callable $fieldResolver
* @return $this
*/
public function setDefaultFieldResolver(callable $defaultFieldResolver)
public function setFieldResolver(callable $fieldResolver)
{
$this->defaultFieldResolver = $defaultFieldResolver;
$this->fieldResolver = $fieldResolver;
return $this;
}

View File

@ -19,17 +19,6 @@ use Psr\Http\Message\StreamInterface;
*/
class StandardServer
{
/**
* Creates new server
*
* @param ServerConfig $config
* @return static
*/
public static function create(ServerConfig $config)
{
return new static($config);
}
/**
* @var ServerConfig
*/
@ -41,10 +30,11 @@ class StandardServer
private $helper;
/**
* StandardServer constructor.
* @param ServerConfig $config
* Standard GraphQL HTTP server implementation
*
* @param ServerConfig|array $config
*/
protected function __construct($config)
public function __construct($config)
{
if (is_array($config)) {
$config = ServerConfig::create($config);
@ -52,9 +42,7 @@ class StandardServer
if (!$config instanceof ServerConfig) {
throw new InvariantViolation("Expecting valid server config, but got " . Utils::printSafe($config));
}
$this->config = $config;
$this->helper = new Helper();
return new static($config);
}
/**
@ -111,7 +99,7 @@ class StandardServer
* @param OperationParams|OperationParams[] $parsedBody
* @param bool $exitWhenDone
*/
public function processRequest($parsedBody = null, $exitWhenDone = false)
public function handleRequest($parsedBody = null, $exitWhenDone = false)
{
$result = $this->executeRequest($parsedBody);
$this->helper->sendResponse($result, $exitWhenDone);

View File

@ -20,7 +20,7 @@ class ServerConfigTest extends \PHPUnit_Framework_TestCase
$this->assertEquals(null, $config->getErrorsHandler());
$this->assertEquals(null, $config->getPromiseAdapter());
$this->assertEquals(null, $config->getValidationRules());
$this->assertEquals(null, $config->getDefaultFieldResolver());
$this->assertEquals(null, $config->getFieldResolver());
$this->assertEquals(null, $config->getPersistentQueryLoader());
$this->assertEquals(false, $config->getDebug());
$this->assertEquals(false, $config->getQueryBatching());
@ -126,12 +126,12 @@ class ServerConfigTest extends \PHPUnit_Framework_TestCase
$config = ServerConfig::create();
$resolver = function() {};
$config->setDefaultFieldResolver($resolver);
$this->assertSame($resolver, $config->getDefaultFieldResolver());
$config->setFieldResolver($resolver);
$this->assertSame($resolver, $config->getFieldResolver());
$resolver = 'date'; // test for callable
$config->setDefaultFieldResolver($resolver);
$this->assertSame($resolver, $config->getDefaultFieldResolver());
$config->setFieldResolver($resolver);
$this->assertSame($resolver, $config->getFieldResolver());
}
public function testAllowsSettingPersistedQueryLoader()
@ -169,7 +169,7 @@ class ServerConfigTest extends \PHPUnit_Framework_TestCase
'errorFormatter' => function() {},
'promiseAdapter' => new SyncPromiseAdapter(),
'validationRules' => [function() {}],
'defaultFieldResolver' => function() {},
'fieldResolver' => function() {},
'persistentQueryLoader' => function() {},
'debug' => true,
'queryBatching' => true,
@ -183,7 +183,7 @@ class ServerConfigTest extends \PHPUnit_Framework_TestCase
$this->assertSame($arr['errorFormatter'], $config->getErrorFormatter());
$this->assertSame($arr['promiseAdapter'], $config->getPromiseAdapter());
$this->assertSame($arr['validationRules'], $config->getValidationRules());
$this->assertSame($arr['defaultFieldResolver'], $config->getDefaultFieldResolver());
$this->assertSame($arr['fieldResolver'], $config->getFieldResolver());
$this->assertSame($arr['persistentQueryLoader'], $config->getPersistentQueryLoader());
$this->assertSame(true, $config->getDebug());
$this->assertSame(true, $config->getQueryBatching());