总台不是随便回答问题的,它必须有一本正式服务手册,写清楚:
- 能问什么
- 每类问题返回什么格式
- 能提交哪些变更
- 哪些字段必填,哪些可空
这本手册,在 GraphQL 里就叫 Schema。
先看一个最小总台手册:
schema {
query: Query
mutation: Mutation
}
type Query {
resident(id: ID!): Resident
tickets(status: TicketStatus, first: Int = 20): [Ticket!]!
device(id: ID!): Device
}
type Mutation {
createTicket(input: CreateTicketInput!): Ticket!
closeTicket(id: ID!, resolution: String!): Ticket!
}
type Resident {
id: ID!
name: String!
zone: String!
tickets(status: TicketStatus): [Ticket!]!
}
type Ticket {
id: ID!
title: String!
description: String!
status: TicketStatus!
resident: Resident!
device: Device
createdAt: String!
}
type Device {
id: ID!
name: String!
location: String!
}
enum TicketStatus {
OPEN
IN_PROGRESS
CLOSED
}
input CreateTicketInput {
residentId: ID!
deviceId: ID
title: String!
description: String!
}这份 Schema 的意思是:
- 总台提供两类入口:
Query和Mutation - 可以查住户、工单、设备
- 可以创建工单、关闭工单
- 住户会关联工单,工单会关联设备
你可以把 Schema 理解成:
Schema = 总台规则 + 业务词典 + 返回格式合同GraphQL 项目一旦复杂,Schema 就是前后端协作的共同语言。