andrew72ru / gql-query-builder
GraphGL 查询构建器
v1.0.0
2018-02-13 12:54 UTC
Requires
- php: >=7.1.0
Requires (Dev)
- codeception/codeception: ^2.3
- friendsofphp/php-cs-fixer: ^2.10
This package is auto-updated.
Last update: 2024-09-23 02:41:15 UTC
README
注意!
该库不包含任何http-clients实现,仅用于为某些GraphQL服务器构建有效的查询。请求的正确性取决于特定的GraphQL服务器实现。
安装
composer require andrew72ru/gql-query-builder
使用
带参数和变量的查询示例
query MyAwesomeScheme($pools: [String!], $objects: [String!], $yesterday: DateTime) {
today: values(pools: $pools, objects: $objects) {
object {
object
expirationDate
}
time
myParam
myOtherParam
}
yesterday: values(pools: $pools, objects: $objects, time: $yesterday) {
object {
object
expirationDate
}
myThirdParam
}
}
上面的代码返回此查询作为字符串
public function createMyQuery()
{
$builder = new Builder();
$builder->setName('MyAwesomeScheme');
$builder->addQueryParam('pools', Builder::TYPE_STRING, true, true)
->addQueryParam('objects', Builder::TYPE_STRING, true, true)
->addQueryParam('yesterday', Builder::TYPE_DATE_TIME, false, false);
$bodyToday = new QueryBody($builder);
$bodyToday->setName('values')
->setVariableName('today')
->addBodyPart(['object' => ['object', 'expirationDate']])
->addBodyPart('time')
->addBodyPart('myParam')
->addBodyPart('myOtherParam');
$bodyToday->addNameParam('pools', 'pools')
->addNameParam('bjects', 'bjects');
$bodyYesterday = new QueryBody($builder);
$bodyYesterday->setName('values')
->setVariableName('yesterday');
$body = [
'object' => [
'object',
'expirationDate',
],
'myThirdParam',
];
$bodyYesterday->setBody($body);
$params = [
[
'name' => 'pools',
'type' => 'pools',
],
[
'name' => 'values',
'type' => 'values',
],
[
'name' => 'time',
'type' => 'yesterday',
]
];
$bodyYesterday->setNameParams($params);
$builder->setBody($bodyToday)->addBodyPart($bodyYesterday);
return $builder->build();
// Or You may use __toString() implementation
// return (string) $builder;
}
不带参数和变量的简单查询
query MyAwesomeScheme {
values {
object {
expirationDate
}
time
}
}
代码
public function createSimpleQuery()
{
$builder = new Builder();
$body = new QueryBody($builder);
$body->setName('quotes')
->setBody([
'symbol' => ['expirationDate'],
'time',
]);
$builder->setBody($body)
->setName('TradingSchema');
return (string) $builder;
}
贡献
欢迎加入! :)
测试
测试是用 Codeception 框架实现的。
- 克隆此仓库;
- 安装需求(
composer install --dev
); - 运行测试:
vendor/bin/codecept run --coverage-html