使用类型语言
定义你的 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);
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。