-
Notifications
You must be signed in to change notification settings - Fork 112
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
Connect HTTP Get support #478
Conversation
Unfortunately, protobuf offers no story whatsoever for canonicalization of protobuf or protojson output. It seems the best we can get is to just make it deterministic within each implementation. Related issues: * golang/protobuf#1121 * golang/protobuf#1373
This is preliminary. It is split into parts: - Plumbing of idempotency level from schema to handlers - Implementation of method-based negotiation with Allow header - Support for GET requests in Connect protocol
This was missing from the original server PR. Q: Should we do anything for the accept header?
* No longer a requirement to specify URL size limit * Separate URL size limit option adds fallback parameter
Overall, I really like the way this has shaped up! Connect's exported APIs don't change much:
|
Maybe we should re-think not having a default set here in that case; but it does put us in a hard spot, because as a user you wouldn't get to choose the fallback behavior. If we make it an error, the end user will probably need two clients just to have a graceful fallback. But if we make it fallback to POST, the end user can't even detect that its a GET or POST until after its finished. Ultimately, most people would probably not have too much of an issue with either behavior, but neither seem particularly good as the only possible behavior. |
Eh, I think the option shape we have is the best way to support the full breadth of options that I suspect we'll eventually need. However, people always surprise me with how not-picky they are; a small part of me wonders if All that said, I'm fine keeping it exported. I feel more strongly about the consistent error handling for sure. |
Oh, please hold off on merging this until we chat next :) I think we should (at least) cut a separate release with everything already on |
LGTM with the test added back. |
[](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github.com/bufbuild/connect-go](https://github.com/bufbuild/connect-go) | require | minor | `v1.6.0` -> `v1.7.0` | --- ### Release Notes <details> <summary>bufbuild/connect-go</summary> ### [`v1.7.0`](https://github.com/bufbuild/connect-go/releases/tag/v1.7.0) [Compare Source](https://github.com/bufbuild/connect-go/compare/v1.6.0...v1.7.0) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed As of this release, the Connect protocol supports performing idempotent, side-effect free requests using HTTP GETs. This makes it easier to cache responses in the browser, on your CDN, or in proxies and other middleboxes. > **Note** > This functionality is *only* supported when using the Connect protocol—using a Connect client with a Connect server. When using `grpc-go` clients, or `connect-go` clients configured with the `WithGRPC` or `WithGRPCWeb` options, all requests will continue to be HTTP POSTs. To opt into GET support for a given Protobuf RPC, you must mark it as being side-effect free using the [MethodOptions.IdempotencyLevel](https://github.com/protocolbuffers/protobuf/blob/e5679c01e8f47e8a5e7172444676bda1c2ada875/src/google/protobuf/descriptor.proto#L795) option: ```proto service ElizaService { rpc Say(stream SayRequest) returns (SayResponse) { option idempotency_level = NO_SIDE_EFFECTS; } } ``` With this schema change, handlers will automatically support both GET and POST requests for this RPC. However, clients will continue to use POST requests by default, even when GETs are possible. To make clients use GETs for side effect free RPCs, use the `WithHTTPGet` option: ```go client := elizav1connect.NewElizaServiceClient( http.DefaultClient, connect.WithHTTPGet(), ) ``` This functionality is *not* yet supported by other Connect implementations (including `connect-es`), but hang tight! We're working on it. For more information, please check the [full documentation](https://connect.build/docs/go/get-requests-and-caching). ##### Enhancements - Connect HTTP Get support by [@​jchadwick-buf](https://github.com/jchadwick-buf) in [https://github.com/bufbuild/connect-go/pull/478](https://github.com/bufbuild/connect-go/pull/478) - Add APIs to make and handle conditional GETs by [@​akshayjshah](https://github.com/akshayjshah) in [https://github.com/bufbuild/connect-go/pull/494](https://github.com/bufbuild/connect-go/pull/494) ##### Bugfixes - Fix `WithCompression` to match docs by [@​jhump](https://github.com/jhump) in [https://github.com/bufbuild/connect-go/pull/493](https://github.com/bufbuild/connect-go/pull/493) **Full Changelog**: bufbuild/connect-go@v1.6.0...v1.7.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/open-feature/flagd). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS40OS4wIiwidXBkYXRlZEluVmVyIjoiMzUuNDkuMCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Akshay Shah <[email protected]>
No description provided.