2015-04-22 69 views
4

我正在開發支持在雲中運行的應用程序,無論是Amazon還是Azure。我需要的組件之一是存儲API(Blob和隊列)的抽象。我可以編寫一個抽象層,但我仍然會得到一大組依賴項(所有的Azure和Amazon庫)。我想要的是提供純HTTP訪問的組件,所以我不需要採取任何外部依賴關係。這樣的野獸是否存在?是否有一個存儲庫將Azure,S3和其他存儲庫抽象出來?

編輯

我迄今所做的是建立一個抽象了對斑點的基本操作的接口。我已經結束了與類似以下內容:

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

我的理解是不同的服務有不同的行爲,但都支持一組基本的CRUD操作。我發現的是我不斷添加更改調用行爲的其他方法。例如,除了

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

我最終也需要

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

建設的第n個方法在這兩種服務後,我意識到,必須有人已經這樣做了。既然這兩者都只是簡單的包裝各自的HTTP接口,我正在尋找的是一個庫,它提供了有關這些操作的抽象。就HTTP而言,發送字節數組和流之間的差別爲零,但每個服務都需要它自己的風格(標頭,編碼,HMAC等)。

我想要的與ODBC爲數據庫提供的內容類似 - 提供了一組通用功能的API,同時承認支持平臺存在差異。我希望這足以縮小這個要求。

感謝, 埃裏克

+1

雖然一個有趣的問題,但不幸仍然是主題:問題要求我們推薦或找到一本書,工具,軟件庫,教程或其他非現場資源是堆棧溢出題外話,因爲他們傾向於吸引輿論的答案和垃圾郵件。相反,請描述問題以及到目前爲止解決問題所做的工作。 – Alex

+0

嘗試詢問[軟件推薦](http://softwarerecs.stackexchange.com/) – BenV

+1

@BenV Software推薦版主此處。我們有相當嚴格的質量指導方針,所以如果您在建議某人重新提問時連接到我們的[問題質量指南](http://meta.softwarerecs.stackexchange.com/q/336/46),我會很感激網站上的問題。謝謝! – Undo

回答

0

一個與這樣一個抽象的主要問題是,它可能會只支持兩種服務的最小公分母加你的行爲可能是不一致的。例如,Azure非常一致,並且完全支持optimistic concurrency,這在圖書館很難滿足。

+0

我明白,但是對於很多應用程序來說,這並沒有太大的區別。如果我正在寫一個數據庫,我需要知道文件系統的細節,但是如果我正在編寫一個簡單的文本編輯器,我不在乎它是NTFS,SAMBA,NFS等。 –

3

庫TwentyTwenty.Storage是用於存儲blob的抽象。它定義了接口,併爲Azure,Amazon S3,Google雲存儲和本地文件系統提供了一些實現。 有關項目github的更多信息:TwentyTwenty.Storage

它可用於.net 4.5和.net核心(netstandard 1.3),並且可以通過nuget安裝。

相關問題