-
Notifications
You must be signed in to change notification settings - Fork 188
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
Server-side multi-protocol support #2979
Labels
Comments
This was referenced Sep 12, 2023
Asking Smithy for guidance: smithy-lang/smithy#2123 |
As we start adding support for new protocols (#3573), this task gains importance: existing services will want to make use of more modern protocols. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Smithy
service
shapes can be annotated with multiple protocol traits.In theory this indicates that clients invoking operations of
MyService
can use any of the tworestJson1
,@awsJson1_1
protocols, andMyService
should accept incoming requests in any of the two protocols.Currently server SDKs are generated such that they only support the first protocol the
service
shape is annotated with; the rest of the protocols are ignored.Multi-protcol support is important for services that want to begin supporting a better protocol and migrate their existing clients to it. Without a period during which the service understands both protocols, the migration becomes challenging or even impossible.
Implementation-wise, one possiblity is that when receiving a request, the server SDK iterates over a priority-ordered list of supported protocols and attempt to "claim" it: if claiming succeeds, the request is handed over to that protocol's router. If routing or any other step thereafter fails, the request is rejected: we do not attempt to process the request with the next protocol.
When tackling this issue I'd like the algorithm to be detailedly documented, and I'd like as much of it to be contributed to the Smithy specification so that other Smithy-based server SDK generators abide by the same rules. In particular, we should answer these questions:
awsJson1_1
protocol, checking first the HTTP version against thehttp
andeventStreamHttp
properties and then checking forContent-Type
equallingapplication/x-amz-json-1.1
should suffice to unambiguously detect that the request is indeed meant to be processed by said protocol (one could additionally and inexpensively check for the URI being/
, method beingPOST
, and the presence ofX-Amz-Target
, so it's important that a decision is made and the concrete steps be documented, ideally in the spec). For other protocols, likerestJson1
, the checks to perform are less apparent.UnknownOperationException
, but serializing said exception is kinda unsolvable when you haven't agreed on a protocol.The text was updated successfully, but these errors were encountered: