Azure / azure-sdk-for-rust

This repository is for active development of the *unofficial* Azure SDK for Rust. This repository is *not* supported by the Azure SDK team.
MIT License
696 stars 241 forks source link

Update azure-autorust to append path and parameters via URL lib #1663

Closed andras-pinter closed 2 months ago

andras-pinter commented 4 months ago

When returning a URL from Client::endpoint the URL contains a tailing slash in any case. This is handled by the URL lib which will append the tailing slash to the end upon calling Display::fmt. Therefore formatting the returned URL from Client::endpoint will result in a duplicated slash, which could cause some (not all) Azure endpoints to have some trouble.

For example: Base URL: https://some-app-conf.azconfig.io/ AppConfigUrl: https://some-app-conf.azconfig.io//keys?api-version=2023-10-01 This resulted in a 404 response.

Removing the tailing slash from the base endpoint's URL manually does not solve the problem, due to the reason mentioned above.

This patch applies a fix to append (set) the formatted path via rust URL lib, which will handle the duplicated slash (or any other problem).

Although I tried to locally generate mgmt and svc crates, I encountered some problems, and autorust removed and added a bunch of new files and modules. So I'd like to ask somebody to help me out with the generation.

heaths commented 4 months ago

Whether there's a trailing slash or not, any code formatting URLs using the endpoint should handle that. It's just as likely that some code erroneously expects a trailing slash, doesn't append on, and ends up with an invalid URL. Besides, in most cases services should canonicalize paths.

I'm reluctant to take this one. Is there some common issue you're seeing with code not appending paths to endpoints with a trialing slash? Can those be fixed? That seems the crux of the problem.

andras-pinter commented 4 months ago

Hey @heaths,

Yes, there is a particular error, what I recently encountered. Please see: https://github.com/Azure/azure-sdk-for-rust/issues/1664

heaths commented 4 months ago

@ctaggart could you review this? If you're good with it, I can regenerate the service crates.

andras-pinter commented 4 months ago

My goal was to let azure_core::Url handle URL creation :)

cataggar commented 4 months ago

@ctaggart could you review this? If you're good with it, I can regenerate the service crates.

Sounds good. Please go ahead.

kingofthehill444 commented 2 months ago

I'm facing this exact issue when trying to use the azure web pub sub crate.

I'm happy to help out but it seems like the change just needs to be merged? Can someone help push this through please?

To give more context, I have my azure web pubsub endpoint as "https://<service>.webpubsub.azure.com". It then gets into this line of code

let mut url = azure_core::Url::parse(&format!("{}/api/hubs/{}/:generateToken", self.client.endpoint(), &self.hub))?;

When I set a breakpoint here, it was showing https://<service>.webpubsub.azure.com//api/hubs/... instead of https://<service>.webpubsub.azure.com/api/hubs/....

The error I get back is "server returned error status which will not be retried: 404"

andras-pinter commented 2 months ago

I made this as a PR instead of a draft. Still facing some issues, if somebody please help me finish this would be really nice! Thanks!

heaths commented 2 months ago

Most of the issues were with nightly tests failing due to evolving lints. Checking if a rebase on main fixes them first.

andras-pinter commented 2 months ago

@microsoft-github-policy-service agree

andras-pinter commented 2 months ago

🎉 Thanks everyone!