watafactory / dwh-query-bundle
DWH 使用 GraphQL 规范检索数据
Requires
- php: >=7.4
- symfony/config: ^5.4
- symfony/dependency-injection: ^5.4
- symfony/framework-bundle: ^5.4
- symfony/http-kernel: ^5.4
- webonyx/graphql-php: ^14.11
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/browser-kit: ^5.4
- symfony/phpunit-bridge: ^5.4
- symfony/yaml: ^5.4
README
关于
DWH 使用 GraphQL 规范检索数据。它使用 webonyx/graphql-php 包:一个基于 JavaScript 参考实现的 PHP GraphQL 规范实现,用于在 PHP 中使用 GraphQL。
如果您想了解 GraphQL,可以从官方网站阅读文档 GraphQL 简介 或 PHP 包的文档。
安装
通过 composer
composer require watafactory/dwh-query-bundle
开发
如果您想扩展库,您可以使用 Docker 设置本地安装
运行 docker-compose up -d 以运行应用程序。默认情况下,使用 docker-compose.yml。
运行 docker-compose exec apache-php composer install 安装供应商。
此 docker-compose 文件用于开发。它启动以下容器
- php:包含应用程序源代码
文档
GraphQL
GraphQL 的主要部分包括
类型
您需要配置 DWH 可以用于查询的数据类型。这只是一个指定用户可以执行哪种类型查询的规范。例如
type ResultCompany {
questionCode: String
block: String
scaleName: String
scaleCode: String
result: String
}
在 GraphQL 中定义此类型后,您可以搜索 ResultCompany 类型并检索所需的字段。
使用 GraphQL-PHP 您可以将类型设置为 这里
解析器
当您使用 GraphQL 查询类型时,您需要指定如何从数据库、api...或您想要的地方检索数据。
解析器是一个函数,它获取您正在查询的类型和查询的参数。使用这些数据,您可以在数据库、api...中进行搜索,并返回包含数据的数组。
使用 GraphQL-PHP 您可以将解析器设置为 这里
查询
为了使用 GraphQL 检索数据,您必须使用查询。查询的结构如下
{
human(id: "1000") {
name
height
}
}
使用此查询,您尝试获取类型“human”,其中“id”为1000,并检索“name”和“height”字段。
DWH 查询包
使用此包,我们可以定义可以查询的类型、获取数据的解析器,并且我们有一个用于发送查询的端点。
DWH 查询包可以通过 此包 扩展
定义类型
包将自动在 config/dwh_query 文件夹中查找所有扩展名为 .graphql 的文件。这些文件使用 Schema Definition Language 定义了模式。您可以在此 处 了解有关信息
这是一个示例
type Query {
allCompanyResult(limit: Int!): [CompanyResult]
}
type CompanyResult {
questionCode: String
block: String
scaleName: String
scaleCode: String
result: String
}
有一个特殊类型名为“Query”,它是其他类型的根。
您可以在 dwh_query.yaml 文件中更改 schemas 目录
dwh_query:
schemas_dir: '%kernel.project_dir%/config/dwh_query'
定义解析器
为了为类型定义解析器,您需要创建一个类,该类实现了 Wata\DwhQueryBundle\Resolver\QueryResolverInterface 接口,并具有两个方法
- getAlias():它返回此解析器的别名。别名必须与您正在编写解析器的类型的名称相同。
- __invoke(…): 该方法接收where子句、orderBy字段、groupBy字段以及包含查询所有信息的info变量。
该包会自动搜索实现此接口的所有类,并将其添加到查询解析器中。
您可以在该类中使用任何依赖注入的服务。
定义预处理拦截器
您可以定义预处理拦截器,以便向解析器添加where子句或执行其他类型的检查,例如权限检查。
您只需要创建一个实现接口Wata\DwhQueryBundle\Interceptor\PreInterceptorInterface的类,并实现__invoke方法即可。
查询端点
端点的路由配置在config/routes/dwh.yaml文件中。
默认情况下,端点是POST /dwh。
您可以添加URL前缀设置。
dwh:
resource: "@DwhQueryBundle/Resources/config/routes.yaml"
prefix: /api
许可证
请参阅LICENSE。