11 个版本 (1 个稳定版本)

1.1.0-rc.12024年8月12日
1.0.0 2024年8月6日
1.0.0-rc.42024年5月3日
1.0.0-rc.22023年7月29日
0.1.2 2022年9月19日

数据库接口 中排名第 1070

Download history 53/week @ 2024-05-04 9/week @ 2024-05-11 9/week @ 2024-05-18 31/week @ 2024-05-25 20/week @ 2024-06-01 39/week @ 2024-06-08 66/week @ 2024-06-15 49/week @ 2024-06-22 6/week @ 2024-06-29 4/week @ 2024-07-06 18/week @ 2024-07-13 10/week @ 2024-07-20 23/week @ 2024-07-27 187/week @ 2024-08-03 153/week @ 2024-08-10 101/week @ 2024-08-17

每月下载量 465

MIT/Apache

2MB
5K SLoC

Seaography logo

🧭 SeaORM 的 GraphQL 框架和代码生成器

crate docs build status

Seaography

Seaography 是一个用于使用 SeaORM 实体构建 GraphQL 解析器的 GraphQL 框架。它附带了一个 CLI 工具,可以从现有的 MySQL、Postgres 和 SQLite 数据库生成可编译的 Rust GraphQL 服务器。

优势

  • 快速轻松上手
  • 生成可读性强的代码
  • 可扩展的项目结构
  • 基于流行的异步库:async-graphqlSeaORM

功能

  • 关系查询(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