使用类型语言

未匹配的标注

定义你的 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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/graphql-php/typ...

译文地址:https://learnku.com/docs/graphql-php/typ...

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~