使用类型语言

未匹配的标注

定义你的 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 执行查询。

性能考虑

从 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);

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~