快速开始
初始化项目 -> 定义类型 -> 启动服务
系统要求
推荐使用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
GraphQL endpoint: http://localhost:8080/graphql
GraphiQL endpoint: http://localhost:8906
Voyager endpoint: http://localhost:8906/voyager