翻译进度
2
分块数量
2
参与人数

使用类型语言

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

定义你的 Schema

从 0.9.0 开始

类型语言 是定义 Schema 的一种便捷方式,尤其是使用 IDE 自动完成和语法验证。

这是一个用 GraphQL 类型语言定义的简单 Schema(例如,在一个单独的 schema.graphql 文件中):

schema {
    query: Query
    mutation: Mutation
}

type Query {
    greetings(input: HelloInput!): String!
}

input HelloInput {
    firstName: String!
    lastName: String
}

为了从这个文件中创建模式实例,使用 GraphQL\Utils\BuildSchema

<?php
use GraphQL\Utils\BuildSchema;

$contents = file_get_contents('schema.graphql');
$schema = BuildSchema::build($contents);

默认情况下,创建这样的 Schema 时不需要任何解析器。

我们必须依靠 默认的字段解析器根值 才能对此 Schema 执行查询。

Ellison 翻译于 2个月前

性能考虑

从 0.10.0 开始

方法 build() 会自动生成一个 惰性 Schema,所以即使对于非常大的 Schema,它也能有效地工作。

但是,在每个请求上解析类型定义文件并不理想,因此建议缓存生产环境 Schema 的中间解析表示形式:

<?php
use GraphQL\Language\Parser;
use GraphQL\Utils\BuildSchema;
use GraphQL\Utils\AST;

$cacheFilename = 'cached_schema.php';

if (!file_exists($cacheFilename)) {
    $document = Parser::parse(file_get_contents('./schema.graphql'));
    file_put_contents($cacheFilename, "<?php\nreturn " . var_export(AST::toArray($document), true));
} else {
    $document = AST::fromArray(require $cacheFilename); // fromArray() 也是一个惰性的操作
}

$typeConfigDecorator = function () {};
$schema = BuildSchema::build($document, $typeConfigDecorator);
Ellison 翻译于 2个月前

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

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


暂无话题~