-
-
Notifications
You must be signed in to change notification settings - Fork 8
Why SimpleS3?
Ian Qvist edited this page Oct 12, 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.
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.