是否有一个存储库抽象出Azure,S3和其他?

Eri*_*k T 8 c# amazon-s3 azure amazon-web-services azure-storage

我正在开发一个支持在云中运行的应用程序,无论是亚马逊还是Azure.我需要的组件之一是围绕存储API(Blob和队列)的抽象.我可以编写一个抽象层,但最终仍然有一大堆依赖项(所有Azure和Amazon库).我想要的是一个提供纯HTTP访问的组件,所以我不需要采取任何外部依赖.这样的野兽存在吗?

编辑

到目前为止,我所做的是构建一个抽象blob基本操作的接口.我最终得到的结果类似于以下内容:

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

我知道不同的服务有不同的行为,但都支持一组基本的CRUD操作.我发现的是我不断添加其他方法来改变调用行为.例如,除了

void PutBlob(string container, string blob, Stream data);
Run Code Online (Sandbox Code Playgroud)

我最终还需要

void PutBlob(string container, string blob, byte[] data);
Run Code Online (Sandbox Code Playgroud)

在两个服务中构建第n个方法之后,我意识到有人必须已经完成了这个.鉴于两者都只是各个HTTP接口的包装器,我正在寻找的是一个围绕这些操作提供抽象的库.就HTTP而言,发送字节数组和流之间的区别是零,但每个服务都需要它自己的风格(标题,编码,HMAC等).

我想要的是类似于ODBC为数据库提供的东西 - 一种提供一组通用功能的API,同时承认支持平台存在差异.我希望这足以使请求变得狭窄.

谢谢,埃里克

gen*_*ane 6

库 TwentyTwenty.Storage 是 Blob 存储的抽象。它定义了 Azure、Amazon S3、Google Cloud 存储和本地文件系统的接口和一些实现。更多信息请参见项目 github:TwentyTwenty.Storage

它适用于 .net 4.5 和 .net core (netstandard 1.3),并且可以通过 nuget 安装。


小智 1

这种抽象的一个主要问题是它可能只支持两种服务的最低共同点,而且您的行为可能不一致。例如,Azure 具有强一致性,并且完全支持乐观并发,而这在这样的库中很难满足。