App Config - Head Requests#48899
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds HEAD-request support to the Azure App Configuration Java SDK to enable efficient change detection via page-level ETags, without downloading response bodies.
Changes:
- Added
checkConfigurationSettingsAPIs to both sync (ConfigurationClient) and async (ConfigurationAsyncClient) clients, backed by the service’s HEAD/kvendpoint. - Added unit tests covering HEAD paging behavior (empty items, page ETag presence) and ETag change detection.
- Added a new sample demonstrating polling-style change detection with cached page ETags, and updated the changelog.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 14 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java | Adds sync checkConfigurationSettings API and JavaDoc samples. |
| sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationAsyncClient.java | Adds async checkConfigurationSettings API and JavaDoc samples. |
| sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/implementation/Utility.java | Adds helpers to translate HEAD responses into PagedResponse and handle 304 for HEAD, plus continuation parsing. |
| sdk/appconfiguration/azure-data-appconfiguration/src/test/java/com/azure/data/appconfiguration/ConfigurationClientTest.java | Adds sync tests for HEAD paging and ETag change detection. |
| sdk/appconfiguration/azure-data-appconfiguration/src/test/java/com/azure/data/appconfiguration/ConfigurationAsyncClientTest.java | Adds async tests for HEAD paging and ETag change detection. |
| sdk/appconfiguration/azure-data-appconfiguration/src/samples/java/com/azure/data/appconfiguration/CheckConfigurationSettingsForChanges.java | New sample demonstrating HEAD-based change detection using page ETags + If-None-Match. |
| sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/package-info.java | Updates package-level instantiation snippets. |
| sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java | Updates builder JavaDoc instantiation/pipeline snippets. |
| sdk/appconfiguration/azure-data-appconfiguration/CHANGELOG.md | Documents the new checkConfigurationSettings feature. |
| // Parse the 'after' query parameter value from the Link header. | ||
| // Link header format: </kv?api-version=2023-10-01&$Select=&after=a2V5MTg4Cg%3D%3D>; rel="next" |
There was a problem hiding this comment.
Why do we need a new parse method for after token? Dont we already support pagination for GET requests? Can we reuse that parsing code?
There was a problem hiding this comment.
Something about how the Java stuff is built makes this part be built into how the @Get that is used works. So no as it doesn't exist in our code.
There was a problem hiding this comment.
Not sure I follow. There is a parseNextLink method that is being used in the existing code. Why is that not enough for HEAD requests? Why do we need after token value specifically for HEAD?
| } catch (java.io.UnsupportedEncodingException e) { | ||
| // UTF-8 is always supported | ||
| throw new RuntimeException(e); |
There was a problem hiding this comment.
Is this an existing pattern in other SDKs? Catch and rethrow?
There was a problem hiding this comment.
The main pattern I see is silently failing and returning null. And having someone downstream deal with it. Would you prefer that?
Description
Adds head request support to the Java SDK.
See Python: Azure/azure-sdk-for-python#45858
See JS: Azure/azure-sdk-for-js#36959
All SDK Contribution checklist:
General Guidelines and Best Practices
Testing Guidelines