Is there a storage library that abstracts out Azure, S3, and others?

I am developing an application that supports work in the cloud, be it Amazon or Azure. Once upon a time, one of the components I need is an abstraction around storage APIs (Blobs and Queues). I can write an abstraction layer, but I still have a huge set of dependencies (all Azure and Amazon libraries). I want a component that provides clean HTTP access, so I don't need to accept any external dependencies. Is there such a beast?

Edit

What I have done so far is to create an interface that abstracts the main operation on blobs. What I ended up looking like this:

public interface IBlobService {
  Task<Stream> DownloadBlob(string container, string blob);
  IEnumerable<string> ListBlobs(string container);
  void PutBlob(string container, string blob, Stream data);
}

I understand that different services have different types of behavior, but both support a basic set of CRUD operations. I find that I continue to add additional methods that change the behavior of the call. For example, an addition to

void PutBlob(string container, string blob, Stream data);

In the end, I also need

void PutBlob(string container, string blob, byte[] data);

After creating the nth method in both services, I realized that someone should have done this already. Given that both are just wrappers around the corresponding HTTP interfaces, I am looking for a library that provides abstraction around these operations. The difference between sending a byte array and a stream is zero with respect to HTTP, but each service requires its own flavor (headers, encoding, HMAC, etc.).

, , , ODBC - API, , , . , .

, Erick

+4
2

TwentyTwenty.Storage - . , Azure, Amazon S3, Google Cloud . github : TwentyTwenty.Storage

.net 4.5 .net(netstandard 1.3) nuget.

+3

, , , , . , Azure concurrency, .

0

Source: https://habr.com/ru/post/1584083/


All Articles