S. *_*Das 4 graphql graphql-subscriptions graphql-java graphql-spqr
如何使用 Graphql SPQR 库实现 GraphQL 的订阅功能?
一般而言,您只需要注释一个方法@GraphQLSubscription并确保该方法返回一个org.reactivestreams.Publisher. 例如
@GraphQLSubscription
public Publisher<Issue> issueStatusChanged(String code) {
return ...;
}
Run Code Online (Sandbox Code Playgroud)
但实际上,这对您没有多大帮助,除非您已经知道如何获取Publisher.
从 Java 9 开始,您可以Flow随意使用 API,并且使用org.reactivestreams.FlowAdapters#toPublisher,您可以将 a 转换Flow.Publisher为 a org.reactivestreams.Publisher。尽管如此,JDK 只有一个内置发布者,SubmissionPublisher它可能不是您所需要的。
相反,它是迄今为止最容易使用兼容库的方法,例如 RxJava 或 Spring Reactor。它们使用的类型要么是直接实例,org.reactivestreams.Publisher要么很容易转换。
有关使用 RxJava 的示例,您可以从 graphql-java 中查看此演示项目。或者这个来自 SPQR 的测试。但是,这两者都过于简单,无法实际使用。
有关更现实的示例,请参阅SPQR Spring Boot Starter 项目中的此演示。它使用的是 Spring Reactor,无论您是否使用 Spring,都可以使用它。每次相关突变运行时,该示例都会发布更新。
现在,制作一个Publisher只是问题的一半。您需要有一种方法将更新发送到客户端。此外,客户端和服务器需要就他们用来交换消息(新结果、任何遇到的错误以及控制消息)的协议达成一致。目前,只有一种广泛使用的协议存在——Apollo graphql-ws 协议。它基于 WebSockets。
SPQR Spring Boot Starter,从 0.0.3 版本开始,实现了这个协议,因此它可以开箱即用地与 Apollo 客户端一起使用。自然也可以使用其他兼容客户端,例如GraphQL Playground。
即使您根本不想使用 SPQR Spring Boot Starter 或 Spring,您仍然可以从那里的示例中学习如何实现服务器。至于客户端,任何 Apollo 教程都可以助您一臂之力。您可以在测试和开发期间使用 GraphQL Playground(GraphiQL 目前不支持订阅)。
| 归档时间: |
|
| 查看次数: |
1990 次 |
| 最近记录: |