dpauli / graphql-request-builder
GraphQL 负载请求构建器
1.8.0
2021-05-13 20:07 UTC
Requires
- php: >=7.4.0
- ext-json: *
- blackbonjour/stdlib: 3.*
Requires (Dev)
- friendsofphp/php-cs-fixer: 3.*
- phpmd/phpmd: 2.*
- phpstan/phpstan: 0.*
- phpunit/phpunit: 9.*
- squizlabs/php_codesniffer: 3.*
- vimeo/psalm: 4.*
README
此库用于构建发送到 GraphQL 服务器的请求。
什么是 GraphQL?
GraphQL 是一种查询语言,便于从远程 Web 服务器请求数据。与 REST 相比,使用 GraphQL 有以下优点:
- 减少请求数量
- 节省负载中的流量
- 避免在客户端请求的数据更改时修改后端
有关完整描述,请参阅 如何使用 GraphQL。
命名约定
GraphQL 的模式由两个简单属性定义:
- 类型
- 参数
类型 定义结构化请求数据对象。参数可以定义这些类型。
示例
类型 forum 可以有 posts,其中包含 authors 和 title。如果您想以响应的形式接收所有 author 和 post 标题信息,您的请求可以如下所示:
{ forum { posts { authors, title } } }
要指定仅请求最后 5 个 posts 的请求,您可以修改您的请求如下所示:
{ forum { posts(last: 5) { authors, title } } }
GraphQL 请求的数据可以复杂到您想要的程度。
{ forum { posts(last: 5) { authors(registration: {date: "2019-08-08"}, visible: true) { surname, prename(startingWith: "a"), birthday }, title }, users(last: 10, sort: "registrationDate", order: "DESC") } }
为什么选择这个库?
此库帮助构建此 负载结构 而无需任何 字符串
连接或其他奇怪的想法。
示例
要创建以下请求负载:
{ field { search(criteria: {start: "2019-08-23"}) { errors { code type description } id } } }
您需要执行以下 PHP 代码:
<?php declare(strict_types=1); use GraphQL\RequestBuilder\Argument; use GraphQL\RequestBuilder\RootType; use GraphQL\RequestBuilder\Type; $searchType = (new Type('search')) ->addArgument(new Argument('criteria', new Argument('start', '2019-08-23'))) ->addSubTypes([ (new Type('errors'))->addSubTypes(['code', 'type', 'description']), 'id' ] ); echo (string) (new RootType('field'))->addSubType($searchType);
构建复杂类型
也可以构建复杂类型。以下代码示例展示了如何做到这一点。
具有数组参数的参数
有时您想具有复杂 参数
类型的数组,如下例所示。
{ persons: [ {age: 30}, {age: 20}, {age: 12} ] }
为此概念,您可以使用类 ArrayArgument
,它提供了向数组添加 参数
的可能性。
<?php declare(strict_types=1); use GraphQL\RequestBuilder\Argument; use GraphQL\RequestBuilder\ArrayArgument; $persons = new ArrayArgument( 'persons', [new Argument('age', 30), new Argument('age', 20), new Argument('age', 12)] );
具有多个参数的数组。
上面的示例在您只有一个 参数
的数组时有效:每个 person 只有一个 参数
,即 age。如果您想要更多的 参数
,您需要创建一个带有空名称的 参数
。
{ persons: [ { name: "Hans", age: 30 }, { name: "Max", age: 20 } ] }
您的 PHP 代码应如下所示:
<?php declare(strict_types=1); use GraphQL\RequestBuilder\Argument; use GraphQL\RequestBuilder\ArrayArgument; $person1 = new ArrayArgument('', [new Argument('name', 'Hans'), new Argument('age', 30)]); $person2 = new ArrayArgument('', [new Argument('name', 'Max'), new Argument('age', 20)]); $persons = new ArrayArgument('persons', [$person1, $person2]);
枚举参数
要创建枚举参数,它应如下所示:
<?php declare(strict_types=1); use GraphQL\RequestBuilder\EnumArgument; $person1 = new EnumArgument('EnumAttribute', 'EnumValue');