跳到主要内容

快速开始

初始化项目 -> 定义类型 -> 启动服务

系统要求

推荐使用Docker构建开发环境
docker-compose.yml
version: "3.8"

services:
gp-mariadb:
container_name: gp-mariadb
image: mariadb:10.6
command:
--group_concat_max_len=4294967295
restart: unless-stopped
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: your-root-password
MYSQL_DATABASE: order
MYSQL_USER: your-username
MYSQL_PASSWORD: your-password
MYSQL_HOST: "%"
networks:
- gp-net

gp-rabbitmq:
container_name: gp-rabbitmq
image: rabbitmq:3
restart: unless-stopped
ports:
- "5672:5672"
networks:
- gp-net

networks:
gp-net:

启动容器

docker-compose up -d

初始化项目

我们首先创建一个名为order的项目, 包名为demo.gp.order

使用官方脚手架快速初始化项目 Graphoenix Server Initializer 或参照手动安装.

项目结构
|-- order
|-- build.gradle
|-- gradle.properties
|-- settings.gradle
|-- order-app 启动模块, 引入订单和其他模块
| |-- build.gradle
| |-- src
| |-- main
| |-- java
| | |-- demo.gp.order
| | |-- App.java 启动类
| |-- resources
| |-- application.conf 配置文件
|-- order-package 订单模块
| |-- build.gradle
| |-- src
| |-- main
| |-- java
| | |-- demo.gp.order
| | |-- package-info.java package-info所在目录作为包名
| |-- resources
| |-- graphql
| |-- order.gql 定义订单相关类型
|-- other-package 可根据需求可以加入其他模块
|-- build.gradle
|-- src
|-- main
|-- java
| |-- demo.gp.other
| |-- package-info.java
|-- resources
|-- graphql
|-- other.gql 定义其他相关类型

1. 定义 GraphQL

设计一个简单的订单系统, 包括用户(User)和订单(Order)和产品(Product), 每个订单包含多个订单项(OrderItem)

关于 GraphQL 类型定义的详细内容, 请参考 GraphQL 官网的类型系统(中文版)和Grphoenix 扩展类型

order-package/src/main/resources/graphql/order.gql
"用户"
type User {
"用户ID"
id: ID!
"用户名"
name: String!
"电子邮箱"
email: String
"联系方式"
phoneNumbers: [String!]
"用户类型"
userType: UserType!
"订单"
orders: [Order!]
}

"用户类型"
enum UserType {
"普通用户"
REGULAR
"会员"
VIP
}

"产品"
type Product {
"产品ID"
id: ID!
"产品名称"
name: String!
"定价"
price: Float!
}

"订单"
type Order {
"订单ID"
id: ID!
"购买用户"
user: User!
"产品列表"
items: [OrderItem!]!
}

"订单项"
type OrderItem {
"订单项ID"
id: ID!
"产品"
product: Product!
"购买数量"
quantity: Int!
}

2. 配置服务与数据库

order-app/src/main/resources/graphql/application.conf
graphql {
buildIntrospection = true // 生成内省文档
}
package {
localPackageNames = ["io.graphoenix.introspection"] // 引入内省模块
}
r2dbc {
driver = "mariadb" // 此处使用mariadb驱动
database = "order" // 数据库
user = "root" // 用户
password = "root" // 密码
}

启动

Run/Debug order-app/src/main/java/demo/gp/order/App.java

start

GraphQL endpoint: http://localhost:8080/graphql

GraphiQL endpoint: http://localhost:8906

graphiQL

Voyager endpoint: http://localhost:8906/voyager

voyager