【发布时间】:2021-11-23 07:07:21
【问题描述】:
当我在后端(即 Apollo)设置我的 GraphQL 定义时,定义操作名称有什么方法或好处吗?
例如,我有一个更新操作,可以将枚举作为参数:
mutation {
updateOrder(status: StatusEnum): Order
}
但我认为我可以为每个状态执行特定的命名操作,并将后端解析器连接到每个状态(随后知道“好的,我是取消解析器,我不需要关心一些枚举")。
mutation {
makeOrderCanceled(): Order
makeOrderPending(): Order
makeOrderComplete(): Order
}
resolvers = {
makeOrderCanceled: () => {
// don't need to infer the status from a param, in essence could
// just hardcode the enum here and prevent the API consumers from
// having to know about it.
}
}
这很好,也许我会这样做。但这省略了操作名称。我读过它对日志记录很有用,并且作为实际 HTTP 请求的一个字段出现。我明白了。但是,如果我作为后端开发人员定义我的类型、查询和突变,我可以做些什么来帮助改进我的架构的意图和建议使用?例如,我能看到的最后一种方法是这样的:
mutation CancelOrder {
updateOrder(status: "cancel"): Order # this
updateOrder(): Order # or this like the examples above
}
mutation CompleteOrder {
updateOrder(status: "complete"): Order # this
updateOrder(): Order # or this like the examples above
}
问题
- 能否在后端定义中定义操作名称?
- 如果上一个问题是肯定的,这样做有什么好处,特别是比较示例 2 和示例 3?
【问题讨论】:
标签: graphql apollo-server graphql-js