配置

配置文件位于/config/graph.php

默认为如下内容:

<?php

return [
    'types' => [
        'graph' => [
            'query' => \app\http\graph\QueryType::class
        ],
        'user' => [
            'query' => \app\http\graph\User\UserType::class
        ]
    ],
    'schema' => [
        'graph'
    ],
    'routePrefix' => 'api/'
];
配置项 说明
types 所有GraphQL的Type
schema 定义入口Type
routePrefix 路由前缀

types

用于定义你在项目中所使用的Types,例如

'types' => [
    'user' => [
        'query' => \app\http\graph\UserType::class
        'mutation' => \app\http\graph\UserMutationType::class
    ]
]

此时在此定义user之后,我们就可以使用Types::user()获取这个Type,例如。

<?php
namespace app\http\graph;

use \smilecc\think\Support\Types;
use \smilecc\think\Support\ObjectType;

class QueryType extends ObjectType
{
    public function fields()
    {
        return [
            'user' => Types::user()
        ];
    }
}

在默认情况下调用Types::user()会自动实例化配置中query所对应的class,而如果需要实例化mutation的话,那么只需要调用Types::user('mutation')即可。

schema

schema是定义入口type的数组,例如默认内容中我们定义了:

'schema' => [
    'graph'
]

这时我们的http://example.com/api/graph就会变成一个入口,我们在设置将这个地址endpoint,就可以将它作为请求的入口了。

所以我们可以有多个入口,例如

<?php

return [
    'types' => [
        'user' => [
            'query' => \app\http\graph\User\UserType::class
        ],
        'admin' => [
            'query' => \app\http\graph\Admin\AdminType::class
        ]
    ],
    'schema' => [
        'user',
        'admin'
    ],
    'routePrefix' => 'api/'
];

这样我们就会拥有 /api/user/api/admin 两个入口来处理不同的业务了。

routePrefix

routePrefix 是路由的前缀,默认的配置中使用的是 api/ ,此时我们使用 api/user 来作为入口,如果我们不喜欢 api/ 可以将其自定义,例如将其修改为 v1/ 后,那我们我们的入口就会变成 /v1/user