翻译进度
4
分块数量
3
参与人数

入门

这是一篇社区协同翻译的文章,你可以点击右边区块信息里的『改进』按钮向译者提交改进建议。

先决条件

本文档假定你熟悉 GraphQL 的概念。 如果不是这样,请首先在 官方网站 上面了解 GraphQL。

安装

使用 composer,只需要在终端里边运行已下命令:

composer require webonyx/graphql-php
Ellison 翻译于 4个月前

升级

我们尽量保证类库的版本向后兼容。但是,当一些变化不可避免时,他们会在 升级说明 中进行说明。

安装工具(可选)

尽管可以使用常规的 HTTP 工具与 GraphQL API 进行通信,但人们使用 GraphiQL(浏览器内置的 IDE )更便于探索 GraphQL API。

它为 GraphQL API 提供语法高亮显示,自动完成和自动生成文档。

使用它的最简单方法是安装一个 Google Chrome 浏览器扩展程序:

或者,你可以按照 GraphiQL 页面上的说明进行安装。

Ellison 翻译于 4个月前

Hello World

让我创建一个能够处理以下简单查询的类型系统:

query {
  echo(message: "Hello World")
}

为此,我们需要构建一个包含 echo 字段的类型对象:

<?php
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;

$queryType = new ObjectType([
    'name' => 'Query',
    'fields' => [
        'echo' => [
            'type' => Type::string(),
            'args' => [
                'message' => Type::nonNull(Type::string()),
            ],
            'resolve' => function ($root, $args) {
                return $root['prefix'] . $args['message'];
            }
        ],
    ],
]);

(注意:类型定义可以使用 不同的方式 来表达,本示例为了简便而使用了 内联(inline) 的样式)

这里有趣的是 resolve 的字段定义,它负责返回我们类型对象的值。scalar 将直接包含在响应中,而
composite 字段(对象、接口、组合)的值将会传递给嵌套字段解析器(但没在本例中)。

现在我们的类型对象已经准备好了,接下来为它创建一个名为 graphql.php 的 GraphQL 终端文件:

<?php
use GraphQL\GraphQL;
use GraphQL\Type\Schema;

$schema = new Schema([
    'query' => $queryType
]);

$rawInput = file_get_contents('php://input');
$input = json_decode($rawInput, true);
$query = $input['query'];
$variableValues = isset($input['variables']) ? $input['variables'] : null;

try {
    $rootValue = ['prefix' => 'You said: '];
    $result = GraphQL::executeQuery($schema, $query, $rootValue, null, $variableValues);
    $output = $result->toArray();
} catch (\Exception $e) {
    $output = [
        'errors' => [
            [
                'message' => $e->getMessage()
            ]
        ]
    ];
}
header('Content-Type: application/json');
echo json_encode($output);

我们的示例完成了,试着运行一下:

php -S localhost:8080 graphql.php
curl http://localhost:8080 -d '{"query": "query { echo(message: \"Hello World\") }" }'

查看本示例的完整 源代码 ,其中还包括简单的变动。

很明显,Hello World 的示例仅仅展示了它的冰山一角。因此请开始下一个更接近真实应用的示例,或者继续阅读 Schema 定义

Honvid 翻译于 4个月前

博客示例

从一个具有全功能的实际示例开始学习,然后再返回到文档通常会更便于理解。

查看 博客示例 GraphQL API。它非常接近于我们在实际工作中开发 GraphQL 的层次结构。 按照说明,并在大约10分钟内尝试一下。

Ellison 翻译于 4个月前

本文章首发在 Laravel China 社区
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

参与译者:3
讨论数量: 0
发起讨论


暂无话题~