#graphql #数据源 #HTTP API #解析器 #实体 #守卫 #SQL

bin+lib devoyage-subgraph

Subgraph 是一个 CLI 工具,可以立即为 Mongo、SQL 和 HTTP API 生成 GraphQL API

2 个版本

0.0.15 2024年6月19日
0.0.12 2023年11月18日

404HTTP服务器

每月 31 次下载

MIT 许可证

605KB
13K SLoC

@The-Devoyage/subgraph

一个基于简单配置文件的动态 GraphQL Web 服务器启动工具。定义配置以告知 subgraph 您数据的形状和可用的数据源。Subgraph 会自动连接到您的数据库,生成 CRU(D) 解析器、身份验证/授权控制等。

按您的需求部署并拥有自己的数据。Subgraph 帮助您与数据交互,使您能够专注于构建界面而不是构建 Web 服务器。

自行承担生产风险 - 从我们的预 alpha 状态到 v0.1.0 的版本,还有一点工作要做。话虽如此,我希望您喜欢到目前为止所做的一切。

文档

Subgraph 文档已移至我们的新 文档网站

快速入门

查看新文档页面中的 快速入门

许可证

使用 subgraph 无需许可证 20 分钟或通过购买 许可证密钥 启用无限制访问。请确保在服务配置中使用密钥启动服务以禁用超时。

API

CLI 选项

  • --help - 查看可用命令。
  • --config <path> - 配置文件的路径。
  • --port <port> - 服务运行的端口号。
  • --log-level <level> - 选项包括 infodebug
  • --watch - 监听包含配置文件的目录中所有文件的变化。防抖 1 秒以避免重复重启。如果初始配置不正确,则服务器不会启动。
  • --generate-keypair - 生成一个可以在微服务之间共享或创建一致私有密钥的密钥对。

配置文件选项

服务* 描述 类型
name* 此服务的名称。 字符串
version API的版本。 字符串
data_sources* 数据所在位置。 DataSource[]
entities* 要定义的数据。 Entity[]
cors GraphQL服务器的CORS选项。 Cors配置
guards 在服务级别应用的守卫。 Guard[]
imports 一个数组,包含从单独文件导入实体的路径。 String[]
port 运行服务的端口号。 Int
license_key 提供一个密钥以移除20分钟演示限制。 字符串
host 启用在0.0.0.0上托管的能力,而不是在localhost/127.0.0.1上。 bool

数据源

DataSource* 描述 类型
Mongo Mongo数据源 Mongo配置
HTTP HTTP数据源 HTTP配置
SQL SQL数据源 SQL配置
Mongo配置 描述 类型
name* Mongo数据源的名称。 字符串
uri* Mongo的连接字符串。 字符串
db* Mongo数据库的名称。 字符串
HTTP配置 描述 类型
name* HTTP数据源的名称。 字符串
url* HTTP数据源的基准URL。 字符串
default_headers 每次请求都包含的标题。 DefaultHeader[]
默认标题 描述 类型
name 键值标题对的键。 字符串
value 键值标题对的值。 字符串
SQL配置 描述 类型
name* SQL数据源的名称。 字符串
uri* SQLX兼容URI 字符串
dialect * SQL数据库的方言。 DialectOption
sqlite_extensions 指定sqlite扩展文件路径的数组。 字符串
migrations_path 包含要运行的迁移的文件夹路径。 字符串

注意 如果提供,则自动加载扩展。如果使用带有标志 --migrate run 的子图运行,则执行迁移。

DialectOption
SQLITE
POSTGRES
MYSQL
资产选项 描述 类型
path* 资产目录的文件路径。 字符串
route* 通过GET请求访问目录的路由。 字符串
SSR选项 描述 类型
path* 资产目录的文件路径。 字符串
route* 通过GET请求访问目录的路由。 字符串
enable_hydrate 允许HTML文件通过handlebars进行水合。 布尔值

Cors配置

Cors配置 描述 类型
allow_any_origin 一个布尔值,指示是否允许任何来源。 布尔值
allow_origins 允许来源列表 String[]
allow_headers 允许头列表 String[]
allow_methods 允许的HTTP方法列表 MethodConfig[]
MethodConfig 描述 类型
method* 允许的方法的字符串表示。 MethodOption
MethodOption
选项
Get
Post
Put
Delete
Head
Trace
Connect
Patch

Entity

Entity* 描述 类型
name* 实体的名称。 字符串
fields* 实体的字段。 Field[]
data_source 实体数据的来源。 实体数据源配置
guards 在实体级别应用的守卫。 Guard[]
required 非空实体。 bool
exclude_from_output 移除解析此实体的能力。 bool
实体数据源配置 描述 类型
from* 相关HTTP数据源的名称。 字符串
collection 相关Mongo集合的名称。 字符串
table 相关SQL表的名称。 字符串
path 相对于相关HTTP数据源路径的路径/端点。 字符串
resolvers 为每个生成的解析器应用的配置。 实体解析器
实体解析器 描述 类型
FindOne Find One解析器的配置 实体解析器配置
FindMany Find Many解析器的配置 实体解析器配置
CreateOne 创建单个解析器的配置 实体解析器配置
UpdateOne 更新单个解析器的配置 实体解析器配置
UpdateMany 更新单个解析器的配置 实体解析器配置
内部 在调用守卫时才能与内部类型交互。
实体解析器配置 描述 类型
search_query 用于附加到实体路径的参数化搜索查询。 字符串
path 用于附加到(HTTP数据源)的参数化URL路径(端点)。 字符串
method 覆盖解析器(HTTP数据源)的默认方法 MethodOption
guards 在解析器级别应用的守卫。 Guard[]

Field

Field* 描述 类型
name* 字段的名称。 字符串
scalar* 字段的标量类型。 标量选项
required 字段是否为必需。默认为false。 bool
exclude_from_input 不应应用于相关输入的解析器列表。 ExcludeFromInput[]
exclude_from_output 删除解析此字段的能力。 bool
list 将标量定义为列表或单个值。 bool
as_type 将字段与另一个实体类型关联,以进行连接/扩展。 字符串
join_on 要连接的类型的外键。 字符串
join_from 执行关联时从中连接的源键。 字符串
guards 应用于字段的守卫列表。 Guard
default_value 为更新和创建解析器应用的计算值eval expr。使用 "null" 表示 null 字符串
is_virtual 在GraphQL输入中定义数据库中不存在的属性。 bool
eager 根据另一个实体的字段搜索实体。 bool
primary_key 使用字段覆盖默认的主键(Mongo的 _id,SQL的 id)。 bool
enum_values 表示字段可能值的字符串列表。 字符串
标量选项
字符串
Int
布尔值
ObjectID
Object
Enum
UUID
DateTime
ResolverType
FindOne
FindMany
CreateOne
UpdateOne
UpdateMany
ExcludeFromInput
FindOne
FindMany
CreateOne
UpdateOne
UpdateMany
UpdateOneQuery
UpdateManyQuery
All

Guard

Guard 描述 类型
name* 守卫的名称。在调用守卫时用作键值对的键。 字符串
if_expr* 用于评估布尔表达式的 EvalExpr 语法。 字符串
then_msg* 如果调用守卫,键值对的键。 字符串
context 定义来自其他数据源调用的额外上下文选项。 GuardDataContext[]
GuardDataContext 描述 类型
entity_name* 源上下文的实体名称。 字符串
name 要添加的上下文的唯一标识符。 字符串
query* 填充上下文的GraphQL查询表达式。 字符串
variables* 表示替代和替换的元组向量的向量。 [String, String][]

if_expr 语法内可用的额外守卫函数。目前在EvalExpr中不支持。

额外的守卫函数 描述 用法
headers 从请求头中提取一个头部值。 headers("authoriation") == "1234"
input 从用户输入中提取一个值。返回元组。 contains(input("query", "comments.user.id"), "23")
token_data 从认证令牌中提取数据,标识符和user_uuid。 token_data("user_uuid") != input("created_by")
resolver_type 在守卫函数中显示解析器的类型 resolver_type() == "FindOne"
context 从守卫提供的上下文中提取一个值。返回元组。 every(context("user.id"), 23)
now 返回当前的 datetime now()
uuid 生成UUIDv4。 uuid()

依赖

~95MB
~2M SLoC