v1.0.0-rc.3
Pre-releaseThis is one of the last pre-releases with improvements to the public API of the code. All code has been meticulously reviewed and documented. I now consider it ready for general use. I don't expect to make any further design changes, only bug fixes.
Highlights
I invested heavily in improving the performance for this release.
Bulk queries now have better throughput. Previously, the rate limiter would wait for a response to be fully processed before allowing the next request to begin. Now, the next request is allowed to begin immediately after receiving a response. This way, the time it takes to process a response is no longer a factor in rate limiting.
Heap allocations in JSON parsers have been further reduced by using static lambdas, to avoid allocating many System.Func<T>
and "DisplayClass" closure objects.
Methods which take a collection of IDs, like GetAchievementsByIds
, now accept IEnumerable<T>
instead of IReadOnlyCollection<T>
, making it possible to compose requests with LINQ, without the use of ToList()
.
WvW objectives polymorphy has been reworked, because there were inconsistencies and name conflicts between owned objectives and the reference data for those owned objectives.
The API exceptions have been simplified. All API failures now throw HttpRequestException
instead of InvalidOperationException
. A subtype BadResponseException
was introduced for responses that don't contain a success status code and a valid JSON document.
The NuGet package size was reduced by about 20% by eliminating duplicate code.
New features
Characters:
- Added the ability to retrieve multiple characters by name at once
Training:
- Added the ability to retrieve specializations by page numbers and page size
Bug fixes
Guilds:
- Fixed a crash when retrieving a guild without a valid access token
- Properties of
Guild
which require a valid access token can now benull
Miscellaneous:
- Improved
ReadAsStreamAsync
cancellation in older .NET versions - Fixed
ValueOnly()
extension method could throwAggregateException
instead of the real exception - Fixed missing
Extensible<T>
enum support forMountName
,ProfessionName
andRaceName
Breaking changes
Story journal:
- Removed unused
MissingMemberHandling
argument from methodGetCompletedStorySteps
WvW objectives:
- Removed property
Objective.Kind
and instead introduced subtypes likeCamp
,Tower
,Keep
etc.
WvW matches:
- Renamed record
Objective
toOwnedObjective
to fix name conflicts - Did the same for all subtypes like
OwnedCamp
,OwnedTower
,OwnedKeep
etc.
Miscellaneous:
- Changed
ByIds
methods to operate onIEnumerable<T>
instead ofIReadOnlyCollection<T>
- Changed
QueryBuilder
to be always mutable since the immutability was never really needed - Moved
Link
header types to a newWebLinks
namespace - Changed
Gw2Client
error handling to throwHttpRequestException
instead of types likesInvalidOperationException
Full Changelog: v1.0.0-rc.2...v1.0.0-rc.3