-
-
Notifications
You must be signed in to change notification settings - Fork 8
Why SimpleS3?
Ian Qvist edited this page Dec 1, 2019
·
4 revisions
Amazon already created a library for S3 that can be found here. While it is a great API for a lot of people, I found it had a lot of problems. Here are the advantages of using SimpleS3:
- It works with third-party services such as Wasabi and Minio. Amazon's AWS SDK does not.
- It is very easy to use for newcomers. In AWS SDK you have to click through 10 pages of documentation just to upload an object.
- It is very small in size. SimpleS3 is just 520 kb in size, where AWS SDK is 3.5 MB.
- Built with simplicity in mind. In AWS SDK you have to do a lot of guesswork to use certain features.
- For example, if you want to add a KMS encryption context to an object, you have to figure out the format, then JSON encode it, then base64 encode it and give it to a property named ServerSideEncryptionKeyManagementServiceEncryptionContext.
- SimpleS3 uses the concept of Builders for all the tricky properties, making it extremely easy to use.
- Much better security.
- We use byte arrays for keys. AWS SDK has a security vulnerability because it stores the secret access key as a string.
- We always clear derived keys after use. AWS SDK never clears the derived key
- We support in-memory encryption of keys.
- We support secure on-disk storage using encrypted profiles.
- We are designed for dependency injection.
- Best practices for library architecture were followed in the design phase to ensure correct layering of abstractions and componentization.
- Support for Microsoft's logging infrastructure. AWS SDK has made their own which is not as flexible.
- Easy unit testing without the use of mocking as everything is designed against an interface.
- SimpleS3 is designed with high-performance and low-memory scenarios in mind.
- Encoding, transformations and crypto code is benchmarked to ensure high throughput.
- No extra memory allocations. Everything is memory-pooled and reused.
- Everything is implemented asynchronously.
- We validate everything on the client-side.
- Can you upload an object with '&' (ampersand) in the name? You won't find out until you try and your request fails.
To solve the problems above, I created this library as an alternative to the AWS SDK library. I think S3 is a great service and everyone should be able to use it with ease, without sacrificing security, performance or flexibility.