v4.0.0-rc1
Pre-release
      Pre-release
    
        
          ·
          
            339 commits
          
          to master
          since this release
        
        
        
Breaking Changes & New Features
- Library is now thread-safe
- Initialize a Clientobject with an API key
- Static methods (i.e. create,retrieve, retrieveallof a resource) exist in services, accessed via property of the client (e.g.myClient.Address.Create())
- Instance methods (i.e. update,delete) accessed on instance of a resource (i.e.myShipment.Update())
 
- Initialize a 
- All properties are now title-cased rather than snake-cased to match standard .NET naming conventions
- e.g. myShipment.idis nowmyShipment.Id,myAddress.federal_tax_idis nowmyAddress.FederalTaxId,myTrackerCollection.has_moreis nowmyTrackerCollection.HasMore
- Some properties have been renamed to avoid naming conflicts:
- Rate.rateis now- Rate.Price
- Message.messageis now- Message.Text
 
 
- e.g. 
- All properties are now nullable
- Almost all properties will be assigned a value during JSON deserialization. This is mostly to address compiler warnings
- Users can proceed with the assumption that any given property will not be null
 
- Consistent exception handling
- All exceptions inherit from EasyPostError
- API-related and HTTP-related exceptions will throw an ApiErroror inherited-type exception
- API exception types can be retrieved by HTTP status code via the EasyPost.Exceptions.Constantsclass (i.e. to anticipate what error will be thrown for a 404, etc.)
- Common exception messages and templates can be found in the EasyPost.Exceptions.Constantsclass (i.e. for log parsing)
 
- All exceptions inherit from 
- Dependencies updated to latest versions, including RestSharpv108
Misc
- Under the hood improvements:
- Underlying Request-Client-ClientConfigurationrelationship has been re-architected to allow for thread safety
- Process of generating an API request has been standardized and simplified
- Improved accessibility levels of internal functions, to prevent accidental use by end users
- Files have been organized into a more logical structure
- Methods and properties have been organized (e.g. methods ordered by CRUD, properties ordered alphabetically)
 
- Underlying