New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feature: subscription HTTP callback support #1771
Comments
It looks like the PR you created in federation-jvm adds implements support
for Http callback protocol for spring-graphql projects. We are currently
working on integrating with spring-graphql in the DGS framework. I expect
this feature would be available for free when that is released later this
quarter. Rather than reimplementing this same logic in the framework, it
would be preferable to leverage what is in the federation-jvm library
already.
…On Mon, Jan 8, 2024 at 3:08 PM Dariusz Kuc ***@***.***> wrote:
Describe the Feature Request
GraphQL subscriptions enable clients to receive continual, real-time
updates whenever new data becomes available. Unlike queries and mutations,
subscriptions are long-lasting. This means a client can receive multiple
updates from a single subscription.
WebSocket is the most commonly used subscription mechanism but it comes
with few drawbacks - most notably it requires long lasting open
connections. Apollo Router supports subscriptions using both the WebSocket
and HTTP callback
<https://www.apollographql.com/docs/router/executing-operations/subscription-callback-protocol/>
mechanism. HTTP callback protocol allows GraphQL servers to asynchronously
send their subscription updates using regular HTTP POST requests which in
turn allows you to scale you servers more easily.
HTTP callback protocol flow
<https://www.apollographql.com/docs/router/executing-operations/subscription-callback-protocol/>
- initialization
- router generates new unique subscription ID
- routers sends subscription operation with additional extension
data using regular HTTP POST request
- subgraph responds with a check message
- router responds with HTTP 204 (if successful)
- subgraph responds with empty { "data": null } GraphQL response
- main loop (run on some background thread)
- subgraph sends heartbeats every X milliseconds (if enabled)
- whenever new data is available, subgraph sends next message
followed by complete message at the end of the stream
See also:
- federation-jvm spring-graphl implementation of the protocol [link
<apollographql/federation-jvm#354> fix
<apollographql/federation-jvm#360>]
Describe Preferred Solution
DGS provides out of the box support for subscriptions using HTTP callback
protocol.
Describe Alternatives
WebSocket based subscriptions are still viable option but don't scale as
nicely.
—
Reply to this email directly, view it on GitHub
<#1771>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AJ5JPXLWCSHGWGJMEGK25I3YNR365AVCNFSM6AAAAABBSGJE6WVHI2DSMVQWIX3LMV43ASLTON2WKOZSGA3TCMZWG42DIMY>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
👍 Sounds good! Feel free to close the issue (or to keep it around until |
It looks like DGS v8.3.0 updates to federation-jvm v4.4.0. Support for subscription callbacks was added in federation-jvm 4.2.0. Does this mean that DGS should support subscriptions via HTTP callback now? Or is it still blocked by the mentioned spring-graphql support since I see that work is being done in v8.2.6 RC releases? |
Support for HTTP callbacks will be available in the spring-graphql integration in a future release, It is not available yet on existing releases. |
Does the release of DGS 8.5.0 with Spring GraphQL integration mean subscription HTTP callbacks are now supported? |
… On Mon, Apr 8, 2024 at 2:50 PM Greg Wardwell ***@***.***> wrote:
Does the release of DGS 8.5.0
<https://github.com/Netflix/dgs-framework/releases/tag/v8.5.0> with
Spring GraphQL integration mean subscription HTTP callbacks are now
supported?
—
Reply to this email directly, view it on GitHub
<#1771 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAA2XLCKCMF6IWXKIHLZCH3Y4MGLRAVCNFSM6AAAAABBSGJE6WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANBTGY4TSNBVGA>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
Describe the Feature Request
GraphQL subscriptions enable clients to receive continual, real-time updates whenever new data becomes available. Unlike queries and mutations, subscriptions are long-lasting. This means a client can receive multiple updates from a single subscription.
WebSocket is the most commonly used subscription mechanism but it comes with few drawbacks - most notably it requires long lasting open connections. Apollo Router supports subscriptions using both the WebSocket and HTTP callback mechanism. HTTP callback protocol allows GraphQL servers to asynchronously send their subscription updates using regular HTTP POST requests which in turn allows you to scale you servers more easily.
HTTP callback protocol flow
check
message{ "data": null }
GraphQL responsenext
message followed bycomplete
message at the end of the streamSee also:
federation-jvm
spring-graphl
implementation of the protocol [link fix]Describe Preferred Solution
DGS provides out of the box support for subscriptions using HTTP callback protocol.
Describe Alternatives
WebSocket based subscriptions are still viable option but don't scale as nicely.
The text was updated successfully, but these errors were encountered: