我正在使用 Virgil Dobjanschi 的选项 B(来自本次演讲:http ://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html )在我的 Android 应用程序上实现 Web 服务连接到 Google Cloud Endpoints RESTful 服务(因此,我的 URL 被抽象了)。
本地 SQLite 数据库需要一个主键(必须称为 _id 以便它可以与 ListView 链接)。AppEngine 服务还要求每条记录有一个唯一的 ID。服务中的资源在多个客户端之间共享,因此它们的 ID 在服务器上需要保持唯一。资源 ID 是从其他两个 ID 派生的,并以字符串的形式生成。
按照设计,这些资源永远不会在 Android 应用程序上本地创建,它们只会被读取和更新——创建和删除发生在其他地方,然后通过 Google Cloud Messaging 发送创建的资源,并附上它们的 REST Id,并插入到 SQLite 表中. 如果我在本地创建它们,我也可以在本地从 REST 资源生成唯一 ID。
我应该让 SQLite 数据库上的 ID 是一个单独的唯一 ID,在本地维护,并将 REST ID 存储在记录中,还是应该将 SQLite ID 设置为与 REST ID 相同?
IE:
我的 REST 资源采用以下形式:
String id; // unique, derived from two other ids
String data;
我的 SQLite 选项是:
create table myResource (
_id INTEGER PRIMARY KEY AUTOINCREMEMT,
restId TEXT,
data TEXT);
或者:
create table myResource (
_id TEXT PRIMARY KEY,
data TEXT);
在第一个选项中,我也可以将 restId 设为唯一。我倾向于第二种选择,但我想知道这种方法是否会遇到无法预料的问题。
对于一些不同的资源,我还有另一种类似的情况,其中 REST 键是 Long 而不是 String,但我仍然质疑我是否应该维护一个与 REST 资源 ID 分开的本地主键。