My current plan for Savon 2.x and eventually 3.0 #1060
Replies: 3 comments 2 replies
|
I released Nori 2.8.0 and 2.9.0. Two things relevant to this plan:
Both opt-in, defaults untouched. These are the kind of behaviors |
|
Pushed a PR for the |
|
I'm glad to see some movement on this since there are some rough spots that we had to work around in My one concern is that since that integration on our side has mostly been "just running" for years and the more conservative approach represented by not turning on In our case, I would prefer to just be able to set |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Hey. I need to get this out of my head. If you discovered this, you're very welcome to provide feedback.
Savon has been around for a long time, and if you run it in production today, chances are you are not on the latest version. I would like to change that.
The goal for 2.x
Every 2.x release is strictly safe to upgrade to.
If it worked in 2.12.1, it works in every 2.x release. Nothing gets removed or renamed.
You might see a warning nudging you toward a newer API. The old one keeps working until 3.0.
If you don't set a new option, Savon behaves exactly as before. The only default-on changes are fixes for behavior that is plainly broken. Anything defensible stays as it is, and the correct behavior becomes something you opt into.
Recent releases already work this way. 2.16 restored APIs that broke between 2.13 and 2.15, 2.17 introduced an optional Faraday-based transport that was planned for 3.0 as an opt-in feature while HTTPI remains the default, and 2.17.1–2.17.4 fixed regressions without touching any defaults. Check out the CHANGELOG to see what already happened.
Companion gems
Savon is really a stack. Nori parses responses, Gyoku builds request XML, Wasabi reads WSDLs, Akami handles WS-Security, HTTPI does transport. I'm treating these pretty much the same, keeping backward compatibility and adding new feature only via opt-in. For example, Nori 2.8.0 just shipped a
:standardsoption that makes parsing follow the XML spec more closely.Opting into the future
All those opt-in options add up, and nobody wants to hunt down twelve flags across six gems. So the plan is one switch in Savon:
future: truemeans give me the next major version's defaults, today. It turns on everything that will become default in the next major version. The Faraday transport, spec-correct parsing, serializable response values, and whatever joins later.This flag is the one documented exception to the safe-upgrade goal. It's a preview channel and its behavior grows with minor releases, and each release's changelog will list what joined under a dedicated heading. There are deliberately no per-feature opt-outs on it. If something under
future: truebreaks your integration, please report any issues so we can fix them instead of adding more workarounds. Your feedback really helps.What 3.0 will look like
The idea for 3.0 is to flip the future defaults on for everyone and remove what 2.x soft-deprecated. If your suite is green on the last 2.x release with
future: true, upgrading to 3.0 should be a non-event. You choose when to do the work, one flag at a time or all at once, on a version you can roll back.cc @olleolleolle @pcai
All reactions