watafactory / dwh-query-bundle

DWH 使用 GraphQL 规范检索数据

安装: 1

依赖项: 1

建议者: 0

安全: 0

星标: 2

关注者: 0

分支: 0

开放问题: 0

类型:symfony-bundle

v1.0.0 2023-02-14 07:48 UTC

This package is auto-updated.

Last update: 2024-09-14 11:33:21 UTC


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