我目前正在用 C++ 开发一款应用,它将与 Ubuntu One 同步数据,但我在网上找不到任何文档来解释如何做到这一点。我发现Ryan Paul 的 Ars Technica 文章它提供了使用 Python 实现此操作的出色介绍,同时提到存在一个库可用于在 C 中实现此操作,但它并未提供关于可在哪里找到此基于 C 的解决方案的提示。我在 Google 上搜索了一段时间,但似乎没有人谈论开发利用 Ubuntu One 同步的应用程序。
有人知道我可以在哪里找到有关这个基于 C 的接口的信息吗?
答案1
Ubuntu One 通过 Desktopcouch 提供数据同步,它是 CouchDB 的本地版本,可自动与 Ubuntu One 和您的所有机器同步。有关云和 Python API 的一些文档可从以下网址获取Ubuntu One 就在这里,如果您想构建使用与 Ubuntu C++ 应用程序相同数据的 Web 应用程序或移动应用程序,这可能会很有用。
C/C++ API 尚未出现在开发者网站上(很快就会出现!),因此这里有一个摘要,应该足以帮助您入门。
对于 C/C++,您有 couchdb-glib 和 deskcouch-glib。couchdb-glib 提供通用的 CouchDB API,而 deskcouch-glib 只提供一个对象,该对象创建一个 Session 对象,其中包含连接到 Ubuntu One 的 deskcouch 所需的一切。
所以:
DesktopcouchSession *dc = desktopcouch_session_new ();
DesktopcouchSession 是 CouchdbSession 的一个子类,因此一旦获得它的一个实例,就可以使用 CouchdbSession 中的方法来访问底层的 CouchDB 实例:
GSList *couchdb_session_list_databases (CouchdbSession *session,
GError **error);
CouchdbDatabase *couchdb_session_get_database (CouchdbSession *session,
const char *dbname,
GError **error);
gboolean couchdb_session_create_database (CouchdbSession *session,
const char *dbname,
GError **error);
gboolean couchdb_session_delete_database (CouchdbSession *session,
const char *dbname,
GError **error);
通过这些方法您可以管理数据库,通过 get_database 和 create_database 您可以获得 CouchdbDatabase 对象的实例,该对象允许您管理数据库中的文档:
GSList *couchdb_database_get_all_documents (CouchdbDatabase *database,
GError **error);
gboolean couchdb_database_put_document (CouchdbDatabase *database,
CouchdbDocument *document,
GError **error);
gboolean couchdb_database_delete_document (CouchdbDatabase *database,
CouchdbDocument *document,
GError **error);
如您所见,还有另一个对象 CouchdbDocument 用于管理文档本身。此外,该对象还有子类用于管理特定类型的文档,例如 CouchdbDocumentContact(用于联系人)。
你可以通过安装 # 来获取完整的 API 参考libcouchdb-glib-文档 软件包。安装 #libdesktopcouch-glib-dev 应该会引入你需要的所有库。
API 可让您访问 CouchDB,因此您当然需要了解 CouchDB 本身的工作原理,以及如何在其中存储数据。简而言之:数据存储在 JSON 文档中,并通过文档 ID 或预先计算的视图提取。http://guide.couchdb.org/是CouchDB书籍,其中更详细地解释了Couch的数据存储方法。
如果您有任何问题,请通过 freenode 上的 #ubuntuone 联系我 (aquarius) 或 rodrigo。我非常乐意与您讨论您的计划以及在 Ubuntu One 数据存储系统中对这些数据进行建模的好方法。