Virgil Dobjanschi のオプション B (このトークから: http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html ) を使用して、Android アプリに Web サービスを実装しています。 Google Cloud Endpoints RESTful サービスに接続します (そのため、私の URL は抽象化されています)。
ローカル SQLite データベースには主キーが必要です (ListView とリンクできるように、_id と呼ばれる必要があります)。AppEngine サービスでは、レコードごとに一意の ID も必要です。サービス内のリソースは複数のクライアント間で共有されるため、それらの ID はサーバー上で一意である必要があります。リソース ID は、他の 2 つの ID から派生し、文字列の形式で生成されます。
設計上、これらのリソースは Android アプリでローカルに作成されることはなく、読み取りと更新のみが行われます。作成と削除は別の場所で行われ、作成されたリソースは Google Cloud Messaging を介して送信され、REST ID と共に送信され、SQLite テーブルに挿入されます。 . それらをローカルで作成する場合は、REST リソースからもローカルで一意の ID を生成できます。
SQLite データベースの ID を別の一意の ID にして、ローカルで維持し、REST ID をレコードに保存する必要がありますか、それとも SQLite ID を REST ID と同じに設定する必要がありますか?
すなわち:
私の 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 を UNIQUE にすることもできます。私は 2 番目のオプションに傾いていますが、このアプローチで予期しない問題が発生するかどうか疑問に思っています。
REST キーが String ではなく Long であるいくつかの異なるリソースでも同様の状況がありますが、REST リソース ID とは別にローカル主キーを保持する必要があるかどうかはまだ疑問です。