-
-
Notifications
You must be signed in to change notification settings - Fork 8
Why SimpleS3?
Ian Qvist edited this page Oct 19, 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:
- It does not work with third-party services such as Wasabi and Minio.
- It is very confusing to use for newcomers. You have to click through 10 pages of documentation to see how to use the API or where to get an API key.
- It is HUGE in size. The NuGet package is 3.6 MB and the S3 assembly in itself is 520 kb.
- It is not built with simplicity in mind. 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 the longest named property ever.
- It is not secure!
- It stores the secret access key as a string.
- It never clears the derived key material
- It does not support in-memory protections
- It does not support secure profile storage
- It is not designed for dependency injection
- Everything is just blobs of code. No real layering of abstractions or componentization
- No logger abstractions make it difficult to integrate
- No interfaces make it hard to mock certain features
- It is not designed for high-performance, low-memory scenarios. The garbage collector withs on overtime trying to keep up with the millions of objects being created. Memory usage is quite high because of it.
- It has very little client-side validation and as a result, it relies on server-side validation. This means a lot of wasted bandwidth on requests. SimpleS3 is designed to validate as much as possible before sending the request.
To solve the problems above, I created this library as an alternative to the official S3 library. I think S3 is a great service and everyone should be able to use it with ease, without sacrificing security, performance or flexibility.