27

Do any APIs/Libraries/tools exist that act as adapters/provider interfaces for accessing different cloud storage services through a common interface? Something similar to ODBC or OLE-DB, except for cloud storage instead of databases.

Such that, if I wrote a front end for taking notes, and I utilized such an API, and let the user provide configuration for which cloud storage provider they have an account with, the API library would handle translating my cloud.Save() call into the commands specific to whiever provider was being utilized. This would allow my front-end app to be cloud storage provider agnostic.

So maybe I wrote some chrome extension or portable thumb drive app for storing notes, or encrypting and storing passwords, or some such, and you tell it which cloud storage provider you have an account with, and it uses it for syncing. This way your use of that tool doesn't tie you to a specific cloud provider. As long as you backup your data, you could migrate to another provider and just reconfigure the app should you become unhappy with that provider or they go bankrupt.

WebDAV for example is one potential candidate since it seems some storage services offer it, but that is not quite what I have in mind, since it depends on the storage providers to offer that as an option. I also don't know enough about WebDAV to know if it really would serve in the capacity I'm imagining. But feel free to post that as an option with pros/cons for comment/discussion.

I more imagine something that is a middle layer external to each cloud provider. Of course since each provider offers a different web service for interacting with files, the middle layer would have adapter for each backend. But on the front-end, it would expose a common API that is provider agnostic.

Does anything of this type exist?

Even just an open source GUI that allows you to store files in any provider, which would imply that in its source code exists the beginnings of such a middle layer. I would think someone has already made a tool that helps you unify all the free GB that you can get from various services. Sort of a JBOD layer for the cloud(although that is not the goal of this post, the point being such a tool accessing many different services would imply it has the beginnings of a middle layer for standardizing access to them).

My main interest though is in abstractions for personal cloud storage services, that would be appropriate for applications used by individuals, to put the control of storage in the hands of the individual so that they can have the freedom to move between personal cloud storage services. It seems what I've found so far is more oriented for CDN, websites, or services.

Please make seperate posts per suggestion so that votes and comments/discussion can take place specific to that suggestion.

AaronLS
  • 37,329
  • 20
  • 143
  • 202
  • It never fails that I spend 30 minutes looking for something, and then 30 seconds after I post I realize the combination of keywords that get me some results. Posting some potential answers now, but will be interested in comments from anyone who has used these tools. Literally it occurred to me to search for *odbc for the cloud* and found a blog on the exact same subject: http://www.janakiramm.net/blog/do-we-need-odbc-for-the-cloud – AaronLS Sep 12 '12 at 22:55
  • check the [open source solution for Java here](https://stackoverflow.com/a/12397221/1592191) – mrsrinivas May 26 '17 at 07:03
  • Google Drive allows multiple files with the same name in the same folder. This is just an example of how storage providers can differ, and it would make such a unified interface challenging. However I'm sure it's possible, it's been done and it's a good idea. – Rolf Nov 19 '17 at 10:22
  • 1
    @Rolf Indeed. Two approaches are to either have a minimal common denominator of features, or allow applications to check for features. Kind of similar to how a graphics library allows applications to check for hardware support of features such as bump mapping or shaders, and then conditionally leverage those features.. – AaronLS Nov 21 '17 at 22:29
  • There is no good solution to this problem yet. Maybe we can close this topic *after* the internets find a solution. – Erik Aronesty Jun 17 '19 at 20:20
  • @ErikAronesty There are actually several good solutions depending on your language and scenario, but the problem with my question was it is a type of "List all the possible solutions" which is generally considered a too broad question for stackoverflow. – AaronLS Jun 17 '19 at 21:12

8 Answers8

12

Kloudless provides a common API to several different cloud storage APIs (Dropbox, Box, GDrive, OneDrive, etc.). Kloudless also provides SDKs in popular languages and UI widgets to handle authentication and other user interactions.

You can find more information and sign up here: https://kloudless.com/

Disclosure: I work at Kloudless.

vinod
  • 2,358
  • 19
  • 26
  • 1
    Disclosure: This is a centralized server, not an API you can deploy on client machines. – Erik Aronesty Jun 17 '19 at 20:19
  • @ErikAronesty Yes, it's also available as a Docker container to self-host or run on on-premises client networks, but rarely on an end-user's laptop for example. – vinod Jun 18 '19 at 00:41
8

Apache jclouds presents cloud-agnostic abstractions, with stable implementations of ComputeService and BlobStore.

visit https://jclouds.apache.org/

Apache jclouds® is an open source multi-cloud toolkit for the Java platform that gives you the freedom to create applications that are portable across clouds while giving you full control to use cloud-specific features.

mrsrinivas
  • 34,112
  • 13
  • 125
  • 125
AaronLS
  • 37,329
  • 20
  • 143
  • 202
6

Apache Libcloud: "a unified interface to the cloud"

http://libcloud.apache.org/

AaronLS
  • 37,329
  • 20
  • 143
  • 202
  • This is not cloud storage, it's cloud computing, doesn't answer the question. – Erik Aronesty Jun 17 '19 at 20:19
  • @ErikAronesty It does include a storage API: https://libcloud.readthedocs.io/en/latest/storage/api.html – AaronLS Jun 17 '19 at 21:11
  • 1
    which doesn't work with cloud storage providers: dropbox, drive, box, etc. It's not suitable for syncing - which was the original question. – Erik Aronesty Aug 23 '19 at 17:49
  • 1
    That's true, yes. Those personal services are not covered by this particular library, which indeed was the context of the original question. But that's different than you saying "this is not cloud storage". Honestly it was not a well defined question, hence why it is closed. At the time I asked it, I had a hard time finding provider agnostic libraries, and wanted to tap into other's knowledge. I could probably ask a more well defined question now that I've seen a good number of these types of libraries/products, but it'd still be out of scope of stackoverflow. – AaronLS Aug 23 '19 at 21:01
3

A couple of months ago I did a survey of personal cloud storage aggregator services and applications. And one seems relevant to your question.

Oxtio is a service that connects multiple cloud storage services and includes a WebDAV service for accessing it's own service.

Josh Heitzman
  • 1,816
  • 1
  • 14
  • 26
  • Oxtio bascially have developed code to talk to virtually ALL the cloud providers (they support LOADS) and built a web app on top of it to let users administrate credentials. They briefly mentioned an API some years ago but doesn't look like it's been launched. http://blog.otixo.com/tag/api-2/ – fatuhoku Mar 16 '13 at 18:44
  • Unfortunately this is also a central server, not an api wrapper or something you can deploy to clients. – Erik Aronesty Jun 17 '19 at 20:21
2

Cloud storage providers each have different specifics which makes it hard to use exactly one interface for all (or even some) of them. CloudBlackbox package of our SecureBlackbox product offers a unified interface for major storage providers (S3, Azure, Google Drive, SkyDrive/OneDrive, Dropbox) with focus on security of the data, but due to mentioned specifics we have individual classes (descendants of one superclass) to serve each provider. SecureBlackbox is available for use from .NET, Java, C++ on Windows and Delphi.

Eugene Mayevski 'Callback
  • 45,135
  • 8
  • 71
  • 121
1

Check out Boto, a highly regarded Python library which provides an abstraction layer atop Amazon's S3 and Google Cloud Storage.

https://github.com/boto/boto

Marc Cohen
  • 3,742
  • 2
  • 19
  • 19
1

-StorageMadeEasy (SME)
-Otixo (But they do not offer FREE tier anymore since Feb 2013)
-Joukuu
-Gladinet
-Egistec CloudHub
...

All of above allows you to connect several cloud storages, but they do not actually combine it.

If you wan to combine several personal cloud storages, you need to make it yourself, which is what I am doing for the past few months.

So far I have combined several clouds (Dropbox, Box, Google Drive, Skydrive) using their Android API/SDK, then I process the data splitting/merging/compression/encryption inside my Android application (not a good choice, just for the sake of prototype)

In the future, maybe I will add more providers that has an API, such as Amazon S3, SugarSync, but right now there is lack of manpower.

If you just want to connect multiple clouds on Android (not combining), then you can try ES File Explorer or ASTRO File Manager, and several other applications

tcboy88
  • 1,063
  • 1
  • 9
  • 23
  • out of curiosity, did you write all the authorization and background syncing for every cloud service, or were you able to find a library to do it for you? – woojoo666 Jun 27 '14 at 18:22
1

I think webdav is the ultimate protocol:

webdav->dropdav->dropbox
webdav->box.net
webdav->DAV-pocket->google drive
webdav->Otixo(free for 14 days)->SugarSync
diyism
  • 12,477
  • 5
  • 46
  • 46