We had an issue come up today around subscriptions where the server:
- Doesn't respond with a snapshot and
- Doesn't name the current version
Eg, the subscription response looks like this:
HTTP/1.1 209 Subscription
content-type: application/json
transfer-encoding: chunked
(And no subsequent data is sent indefinitely.)
The problem is that the client has no idea what to display to the user - they have no idea what the document looks like until the server sends an update. This would result in bad UX (loading spinner forever), and I consider it an antipattern. I think the spec should recommend against this.
I think either:
- The client doesn't have a copy of the document. In the response the server should immediately either send a snapshot of the document, or send all patches immediately) or
- The client does have a copy of the document at some known version. The client names that version in its request (using the
parents: header) and the server responds by bringing the client up to date, and uses the current-versions: header to name the most recent version.
I propose we add wording like this in the spec:
The server SHOULD either use the current-version header or when a client connects, or immediately send a full snapshot update.
@toomim said there are some other valid use cases for servers doing this. What are the other use cases I'm missing?
We had an issue come up today around subscriptions where the server:
Eg, the subscription response looks like this:
(And no subsequent data is sent indefinitely.)
The problem is that the client has no idea what to display to the user - they have no idea what the document looks like until the server sends an update. This would result in bad UX (loading spinner forever), and I consider it an antipattern. I think the spec should recommend against this.
I think either:
parents:header) and the server responds by bringing the client up to date, and uses thecurrent-versions:header to name the most recent version.I propose we add wording like this in the spec:
@toomim said there are some other valid use cases for servers doing this. What are the other use cases I'm missing?