11 个版本 (1 个稳定版本)
1.1.0-rc.1 | 2024年8月12日 |
---|---|
1.0.0 | 2024年8月6日 |
1.0.0-rc.4 | 2024年5月3日 |
1.0.0-rc.2 | 2023年7月29日 |
0.1.2 | 2022年9月19日 |
在 数据库接口 中排名第 1070
每月下载量 465
2MB
5K SLoC
Seaography
Seaography 是一个用于使用 SeaORM 实体构建 GraphQL 解析器的 GraphQL 框架。它附带了一个 CLI 工具,可以从现有的 MySQL、Postgres 和 SQLite 数据库生成可编译的 Rust GraphQL 服务器。
优势
- 快速轻松上手
- 生成可读性强的代码
- 可扩展的项目结构
- 基于流行的异步库:async-graphql 和 SeaORM
功能
- 关系查询(1-1,1-N)
- 查询和关系(1-N)的分页
- 使用运算符进行过滤(例如 gt,lt,eq)
- 按任何列排序
- 保护字段、查询或关系
- 重命名字段
- 突变(创建、更新、删除)
(目前尚无突变,但已在我们的计划中!)
SeaORM 版本兼容性
Seaography | SeaORM |
---|---|
1.1-rc | 1.1-rc |
1.0 | 1.0 |
0.12 | 0.12 |
0.3 | 0.10 |
快速开始 - 3 分钟即可运行!
安装
cargo install sea-orm-cli@^1.0.0 # used to generate entities
cargo install seaography-cli@^1.0.0
MySQL
设置 sakila 示例数据库。
cd examples/mysql
sea-orm-cli generate entity -o src/entities -u mysql://user:[email protected]/sakila --seaography
seaography-cli ./ src/entities mysql://user:[email protected]/sakila seaography-mysql-example
cargo run
转到 https://127.0.0.1:8000/ 并尝试以下查询
获取电影及其演员
{
film(pagination: { page: { limit: 10, page: 0 } }, orderBy: { title: ASC }) {
nodes {
title
description
releaseYear
actor {
nodes {
firstName
lastName
}
}
}
}
}
获取商店及其员工
{
store(filters: { storeId: { eq: 1 } }) {
nodes {
storeId
address {
address
address2
}
staff {
firstName
lastName
}
}
}
}
按分页获取不活跃的客户
{
customer(
filters: { active: { eq: 0 } }
pagination: { page: { page: 2, limit: 3 } }
) {
nodes {
customerId
lastName
email
}
paginationInfo {
pages
current
}
}
}
使用游标分页的上述查询
{
customer(
filters: { active: { eq: 0 } }
pagination: { cursor: { limit: 3, cursor: "Int[3]:271" } }
) {
nodes {
customerId
lastName
email
}
pageInfo {
hasPreviousPage
hasNextPage
endCursor
}
}
}
具有关系过滤的复杂查询
查找所有不活跃的客户,包括他们的地址,以及金额大于7的付款,并按金额排序第二个结果
{
customer(
filters: { active: { eq: 0 } }
pagination: { cursor: { limit: 3, cursor: "Int[3]:271" } }
) {
nodes {
customerId
lastName
email
address {
address
}
payment(
filters: { amount: { gt: "7" } }
orderBy: { amount: ASC }
pagination: { page: { limit: 1, page: 1 } }
) {
nodes {
paymentId
amount
}
paginationInfo {
pages
current
}
pageInfo {
hasPreviousPage
hasNextPage
}
}
}
pageInfo {
hasPreviousPage
hasNextPage
endCursor
}
}
}
使用枚举进行过滤
{
film(
filters: { rating: { eq: NC17 } }
pagination: { page: { page: 1, limit: 5 } }
) {
nodes {
filmId
rating
}
}
}
Postgres
设置 sakila 示例数据库。
cd examples/postgres
sea-orm-cli generate entity -o src/entities -u postgres://user:pw@localhost/sakila --seaography
seaography-cli ./ src/entities postgres://user:pw@localhost/sakila seaography-postgres-example
cargo run
SQLite
cd examples/sqlite
sea-orm-cli generate entity -o src/entities -u sqlite://sakila.db --seaography
seaography-cli ./ src/entities sqlite://sakila.db seaography-sqlite-example
cargo run
贡献
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可证定义,应按上述方式双许可,不附加任何额外条款或条件。
海洋学是一个社区驱动的项目。我们欢迎您参与、贡献并与我们一起为Rust的未来建设。
依赖项
~21–38MB
~689K SLoC