第10章 $fh.sync
クラウド同期フレームワークでは、バックエンドデータへのアクセスを提供し、データ競合を管理するハンドラー関数を定義する必要があります。これらは、handleXXX() 関数で指定されます。管理される一意のデータセットはそれぞれ、dataset_id で識別されます。これは、同期フレームワークのどの関数を呼び出す際にも、最初のパラメーターとして指定される必要があります。
ハンドラー関数のデフォルト実装は、MBaaS サービスの一部として既に提供されています。これらはホストされているデータベースサービスを指定して、($fh.db で) データを保存します。使用するアプリにおいてこれで十分な場合は、さらにハンドラー関数を実装する必要はなく、init 関数を呼び出して sync オプションを提供してください。
ただし、デフォルト実装がアプリ要件を満たさない場合 (データを他の場所に保存する必要がある場合など) は、以下に挙げるハンドラー関数の実装を提供する必要があります。CRUDL (作成、読み込み、更新、削除、一覧表示) 操作すべてに実装を提供する、または対応するハンドラー関数の上書きを提供するだけで特定操作のデフォルト動作を変更することもできます。例えば、上書きの $fh.sync.handleRead 関数を提供して独自のデータ論理読み込みを実装し、その他の操作ではデフォルトの MBaaS 実装を使用するようにすることが可能です。
以下の表では、本リリースにおけるfh-mbaas-api バージョン 7 の導入に関連した API の変更を掲載しています。7.0.0 以前のバージョンも引き続き使用可能で、そのドキュメントも利用可能になっています。
| API | 7.0.0 以降 | 7.0.0 より前 |
|---|---|---|
|
$fh.sync.setConfig |
該当なし | |
|
$fh.sync.connect |
該当なし | |
|
$fh.sync.init | ||
|
$fh.sync.invoke | ||
|
$fh.sync.stop | ||
|
$fh.sync.stopAll | ||
|
$fh.sync.handleList | ||
|
$fh.sync.globalHandleList | ||
|
$fh.sync.handleCreate | ||
|
$fh.sync.globalHandleCreate | ||
|
$fh.sync.handleRead | ||
|
$fh.sync.globalHandleRead | ||
|
$fh.sync.handleUpdate | ||
|
$fh.sync.globalHandleUpdate | ||
|
$fh.sync.handleDelete | ||
|
$fh.sync.globalHandleDelete | ||
|
$fh.sync.handleCollision | ||
|
$fh.sync.globalHandleCollision | ||
|
$fh.sync.listCollisions | ||
|
$fh.sync.globalListCollisions | ||
|
$fh.sync.removeCollision | ||
|
$fh.sync.globalRemoveCollision | ||
|
$fh.sync.setGlobalHashFn |
該当なし | |
|
$fh.sync.setRecordHashFn |
該当なし | |
|
$fh.sync.interceptRequest | ||
|
$fh.sync.globalInterceptRequest | ||
|
$fh.sync.getEventEmitter |
該当なし |
10.1. $fh.sync.setConfig
同期サーバーを設定します。
同期サーバーの準備ができた後、データセットの初期化前にこの API を呼び出します。sync.init への呼び出しが明示的になければ、データセットの初期化は通常、最初の同期クライアントの接続時に行われます。いずれの場合でも、setConfig を呼び出す妥当なタイミングは、sync:ready イベントがトリガーする時になります。
10.1.1. 使用法
$fh.sync.setConfig(options)
10.1.2. パラメーター
10.1.2.1. options
- 説明: 同期サーバーの設定オプション。
- タイプ: Object
サポートされるキー
pendingWorkerInterval
- 説明: 保留中ワーカーの間隔をミリ秒単位で設定します。ワーカーの間隔に関する詳細は、データ同期設定ガイド を参照してください。
- タイプ: 数字
- デフォルト値: 1
pendingWorkerBackoff
- 説明: 保留中ワーカーのバックオフ戦略を指定します。ワーカーのバックオフに関する詳細は、データ同期設定ガイド を参照してください。
- タイプ: Object
デフォルト値: {strategy: 'exp', max: 60000}
strategy
バックオフ戦略を定義します。有効な値は
exp(exponential: 指数) とfib(fibonacci) です。これ以外の値を設定すると、ワーカーバックオフは無効になります。max
バックオフ戦略の最大遅延時間 (ミリ秒単位)。
pendingWorkerConcurrency
- 説明: 同時実行の保留中ワーカーの数を設定します。0 に設定すると保留中ワーカーは無効になります。
- タイプ: 数字
- デフォルト値: 1
ackWorkerInterval
- 説明: ack ワーカーの間隔をミリ秒単位で設定します。ワーカーの間隔に関する詳細は、データ同期設定ガイド を参照してください。
- タイプ: 数字
- デフォルト値: 1
ackWorkerBackoff
- 説明: ack ワーカーのバックオフ戦略を指定します。ワーカーのバックオフに関する詳細は、データ同期設定ガイド を参照してください。
- タイプ: Object
デフォルト値: {strategy: 'exp', max: 60000}
strategy
バックオフ戦略を定義します。有効な値は
exp(exponential: 指数) とfib(fibonacci) です。これ以外の値を設定すると、ack ワーカーのバックオフ戦略は無効になります。max
バックオフ戦略の最大遅延時間 (ミリ秒単位)。
ackWorkerConcurrency
- 説明: 同時実行の ack ワーカーの数を設定します。0 に設定すると ack ワーカーは無効になります。
- タイプ: 数字
- デフォルト値: 1
syncWorkerInterval
- 説明: 同期ワーカーの間隔をミリ秒単位で設定します。ワーカーの間隔に関する詳細は、データ同期設定ガイド を参照してください。
- タイプ: 数字
- デフォルト値: 100
syncWorkerBackoff
- 説明: 同期ワーカーのバックオフ戦略を指定します。ワーカーのバックオフに関する詳細は、データ同期設定ガイド を参照してください。
- タイプ: Object
デフォルト値: {strategy: 'none'}
strategy
バックオフ戦略を定義します。有効な値は
exp(exponential: 指数) とfib(fibonacci) です。これ以外の値を設定すると、バックオフ戦略は無効になります。max
バックオフ戦略の最大遅延時間 (ミリ秒単位)。
syncWorkerConcurrency
- 説明: 同時実行の同期ワーカーの数を設定します。0 に設定すると同期ワーカーは無効になります。
- タイプ: 数字
- デフォルト値: 1
collectStats
説明: 同期サーバーがパフォーマンス数値データを収集するかどうかを決定します。
デフォルトでは、同期サーバーは db 操作のタイミングや API のタイミング、キューのサイズなど、いくつかのパフォーマンスデータを収集します。
数値データは Redis に保存され、パフォーマンスオーバーヘッドは最小限に抑えられます。
- タイプ: ブール値
- デフォルト値: true
statsRecordsToKeep
- 説明: Redis 内の各メトリックシリーズで保存される数値データのポイント数を決定します。
- タイプ: 数字
- デフォルト値: 1000
collectStatsInterval
- 説明: 数値を収集する頻度をミリ秒単位で決定します。
- タイプ: 数字
- デフォルト値: 5000
metricsInfluxdbHost
- 説明: 同期サーバーがパフォーマンスデータを送信する InfluxDB ホストを指定します。
- タイプ: 文字列
- デフォルト値: null
metricsInfluxdbPort
- 説明: InfluxDB ポートを指定します。UDP ポートにする必要があります。
- タイプ: 数字
- デフォルト値: null
queueMessagesTTL
- 説明: 削除のマークが付けられたキューメッセージの有効時間 (TTL) を設定します。TTL が過ぎるとメッセージがデータベースから削除されます。(秒単位)
- タイプ: 数字
- デフォルト値: 86400 (1 日)
datasetClientCleanerRetentionPeriod
説明: 非アクティブな datasetClient が削除されるまでデータベースに保存される期間を指定します。
datasetClients の不要な削除をさけるために、アプリに適切な値でこの設定を上書きすることを検討してください。例えば、週末にこのアプリを使用するユーザーがいない場合は、この値を '96h' に設定できます。
- タイプ: 文字列
デフォルト値: '24h'
- サポートされる単位は以下の通りです: s (秒)、m (分)、h (時間)、d (日)、w (週)、y (年)
datasetClientCleanerCheckFrequency
- 説明: datasetClient のクリーナージョブの実行頻度を指定します。
- タイプ: 文字列
- デフォルト値: '1h'
useCache
説明: データセットクライアントのレコードをキャッシュする際に Redis を使用するかどうかを指定します。
これを有効にするとデータベース上のリクエスト数が低減され、
syncRecordsAPI 呼び出しの時間が短縮されます。これは実験的な機能で、変更が全クライアントで表示されるまでに時間がかかる場合があります。
- タイプ: ブール値
- デフォルト値: false
schedulerInterval
説明: 同期スケジューラーの間隔をミリ秒単位で設定します。
通常はデフォルト値を変更する必要はありません。
- タイプ: 数字
- デフォルト値: 500
schedulerLockName
説明: 常に 1 つの同期スケジューラーのみが実行可能であることを担保するためにロックが使用されます。このフィールドではロックの名前を決定します。
通常はデフォルト値を変更する必要はありません。
- タイプ: 文字列
- デフォルト値: locks:sync:SyncScheduler
schedulerLockMaxTime
説明: 常に 1 つの同期スケジューラーのみが実行可能であることを担保するためにロックが使用されます。このフィールドでは、同期スケジューラーがロックを保持できる最大時間を決定します。これは、同期スケジューラーがロックを永遠に保持しないようにするためのものです (例: プロセスがクラッシュした場合など)。
通常はデフォルト値を変更する必要はありません。
- タイプ: 数字
- デフォルト値: 20000
datasetClientUpdateConcurrency
説明: 同期サーバーに対して多くの同時実行の同期リクエストがある場合、データセットクライアントに多くの更新操作が生成されます。データベースの過剰負荷をさけるために、これらの操作はキューに入れられ、このオプションの同時実行で遂行されます。
通常はデフォルト値を変更する必要はありません。
- タイプ: 数字
- デフォルト値: 10
10.1.3. 例
$fh.events.on('sync:ready', function(){
var pendingWorkerInterval = process.env.PENDING_WORKER_INTERVAL || 500;
var syncWorkerInterval = process.env.SYNC_WORKER_INTERVAL || 500;
var ackWorkerInterval = process.env.ACK_WORKER_INTERVAL || 500;
var useCache = process.env.USE_CACHE === 'true';
var syncConfig = {
pendingWorkerInterval: parseInt(pendingWorkerInterval),
ackWorkerInterval: parseInt(ackWorkerInterval),
syncWorkerInterval: parseInt(syncWorkerInterval),
collectStatsInterval: 4000,
metricsInfluxdbHost: process.env.METRICS_HOST,
metricsInfluxdbPort: parseInt(process.env.METRICS_PORT),
useCache: useCache
};
$fh.sync.setConfig(syncConfig);
});10.2. $fh.sync.connect
同期サーバーが MongoDB および Redis といった必須リソースに接続されるようにします。
fh-mbaas-api から同期サーバーを使用する際は、sync.connect が自動的に呼び出され、クラウドアプリのデータベースを使用します。このシナリオでは、sync.connect を呼び出す必要はありません。
10.2.1. 使用法
$fh.sync.connect(mongodbConnectionString, mongodbConf, redisConnectionString, callback)
10.2.2. パラメーター
10.2.2.1. mongodbConnectionString
-
説明: MongoDB の接続 url。この url はすぐに
mongodbモジュールに渡されます。 - タイプ: 文字列
10.2.2.2. mongodbConf
説明: MongoDB の接続オプション。このオプションに関する詳細は、MongoClient.connect API doc を参照してください。
通常は、この API を呼び出す必要はありませんが、環境変数を使用することで MongoDB 接続オプションのいくつかを制御することができます。
SYNC_MONGODB_POOLSIZE
- 説明: MongoDB 接続のプールサイズを指定
- タイプ: 数字
- デフォルト値: 50
- タイプ: Object
10.2.2.3. redisConnectionString
-
説明: Redis の接続 URL。必要な場合は、これに認証情報を含めることができます。この URL は
redisモジュールに直接渡されます。 - タイプ: 文字列
10.2.2.4. コールバック
- 説明: コールバック関数
- タイプ: 関数
10.2.3. 例
var mongodbUrl = "mongodb://mongouser:mongopass@127.0.0.1";
var redisUrl = "redis://redisuser:redispass@127.0.0.1";
$fh.sync.connect(mongodbUrl, {}, redisUrl, function(err){
if (err) {
console.error('Connection error for sync', err);
} else {
console.log('sync connected');
}
});10.3. $fh.sync.init
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
データセットの同期オプションを設定し、同期プロセスを開始します。この API は、データセット上での同期プロセスの開始にも使用できます。
この API 呼び出しはオプションですが、特定のデータセットのオプションを上書きすることができます。
10.3.1. 使用法
$fh.sync.init(dataset_id, options, callback)
10.3.2. パラメーター
10.3.2.1. dataset_id
- 説明: 同期する必要のあるデータセットの ID。
- タイプ: 文字列
10.3.2.2. options
- 説明: データセットの同期オプション。
- タイプ: Object
サポートされるキー:
syncFrequency
説明: 同期操作の間で同期サーバーが待機する時間を設定します (秒単位)。
このオプションの値を決定するには、Configuring Sync Frequency および Sync Server Performance and Scaling を確認してください。
- タイプ: 数字
- デフォルト値: 30
clientSyncTimeout
説明: アクティビティがないためにデータセットクライアントが "inactive" とマークされるまでの時間を指定します (秒単位)。
データセットクライアントが "inactive" とマークされると、同期サーバーはこのデータセットクライアントとバックエンドとの同期を停止します。
ユーザーが後でこの "inacitve" なデータセットクライアントにアクセスすると、次回の同期操作が完了するまで、ユーザーは待機する必要がある可能性があります。このシナリオを避けるには、このタイムアウトを比較的長い時間に設定します。
- タイプ: 数字
- デフォルト値: 3600 (1 時間)
backendListTimeout
- 説明: 同期サーバーがバックエンドデータベースとの同期操作の完了を待機するタイムアウト値を指定します (秒単位)。
- タイプ: 数字
- デフォルト値: 300
10.3.2.3. コールバック
-
説明:
fh.initが完了した際に起動するコールバック関数。 - タイプ: 関数
10.3.3. 例
var datasetId = "todolist";
var syncOptions = {
syncFrequency: 10,
clientSyncTimeout: 24*60*60
};
$fh.sync.init(datasetId, syncOptions, function(err){
if (err) {
console.error('sync init failed due to error', err);
} else {
console.log('sync init finished successfully');
}
});10.3.4. $fh.sync.init (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.init(dataset_id, options, callback)
指定されたデータセットのクラウドデータ同期サービスを初期化します。
10.3.4.1. 例
// Unique Id for the dataset to initialise.
var dataset_id = 'tasks';
// Configuration options
var options = {
"syncFrequency": 10, // How often to synchronise data with the back end data store in seconds. Default: 10s
"logLevel":"info" // The level of logging. Can be usful for debugging. Valid options including: 'silly', 'verbose', 'info', 'warn', 'debug', 'error'
};
$fh.sync.init(dataset_id, options, function(err) {
// Check for any error thrown during initialisation
if (err) {
console.error(err);
} else {
//you can now provide data handler function overrides (again, not required at all). For example,
$fh.sync.handleList(dataset_id, function(dataset_id, params, cb, meta_data){
//implement the data listing logic
});
}
});10.4. $fh.sync.invoke
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
同期サーバーの内部同期関数を開始します。通常の開発ではこれらの関数を開始する必要はありません。この API は 同期クライアントから呼び出されるので、params オブジェクトは同期クライアントからのリクエストのボディと同じであることに留意してください。
10.4.1. 使用法
$fh.sync.invoke(dataset_id, params, callback)
10.4.2. パラメーター
10.4.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.4.2.2. params
- 説明: ターゲットの関数名を指定します。ターゲット関数に渡されます。
- タイプ: Object
サポートされるキー:
fn
説明: 開始するターゲットの関数名を指定します。以下の関数がサポートされています。
- sync
- syncRecords
- listCollisions
- removeCollision
- タイプ: 文字列
- 他のフィールドはターゲット関数によって異なります。必須フィールドのソースコードを確認してください。
10.4.3. 例
var datasetId = "todo";
var syncRecordsParams = {
fn: 'syncRecords',
dataset_id: datasetId,
query_params: {},
clientRecs: {},
__fh: {
cuid: 'testdeviceid'
}
};
$fh.sync.invoke(datasetId, syncRecordsParams, function(err, syncData) {
if (err) {
console.error('Failed to call syncRecords due to error', err);
} else {
console.log('Got sync data', syncData);
}
});10.4.4. $fh.sync.invoke (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.invoke(dataset_id, params, callback)
同期サーバーを起動します。
10.4.4.1. 例
// This should be called from a cloud “act” function.
// The params passed to the “act” function:
var params = {
"limit": 50
};
$fh.sync.invoke(dataset_id, params, function() {
// "act" function callback
});10.5. $fh.sync.stop
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
特定のデータセットとデータセットバックエンドとの同期を停止します。
10.5.1. 使用法
$fh.sync.stop(dataset_id, callback)
10.5.2. パラメーター
10.5.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.5.2.2. コールバック
- 説明: コールバック関数
- タイプ: 関数
10.5.3. 例
var datasetId = "todolist";
$fh.sync.stop(datasetId, function(err){
if (err) {
console.error('sync stop failed due to error', err);
} else {
console.log('sync stop finished successfully');
}
});10.5.4. $fh.sync.stop (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.stop(dataset_id, callback)
指定された dataset_id のクラウドデータ同期を停止します。
10.5.4.1. 例
// This will remove any reference to the dataset from the sync service.
// Any subsequent cloud calls to sync.invoke will fail with an unknown_dataset error.
// The dataset can be put back under control of the sync service by calling the
// sync.init() function again.
// Calling stop on a non-existent dataset has no effect.
// Calling stop multiple times on the same dataset has no effect.
$fh.sync.stop(dataset_id, function() {
// Callback to invoke once the dataset has been removed from the management
// of the service.
// There are no parameters passed to this callback.
});10.6. $fh.sync.stopAll
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
すべてのデータセットとデータセットバックエンドとの同期を停止します。
10.6.1. 使用法
$fh.sync.stopAll(callback)
10.6.2. パラメーター
10.6.2.1. コールバック
- 説明: コールバック関数
- タイプ: 関数
10.6.3. 例
$fh.sync.stopAll(function(err){
if (err) {
console.error('sync stopAll failed due to error', err);
} else {
console.log('sync stopAll finished successfully');
}
});10.6.4. $fh.sync.stopAll (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.stopAll(callback)
全データセットのクラウドデータ同期サービスを停止します。
10.6.4.1. 例
// This will remove all reference to all datasets from the sync service.
// Any subsequent cloud calls to sync.invoke() will fail with an unknown_dataset error.
// Any of the datasets can be put back under control of the sync service by calling
// the sync.init() function again and passing the required dataset_id.
// Calling stop multiple times has no effect -
// except that the return data to the callback (an array of dataset_ids which are no longer being synced) will be different.
$fh.sync.stopAll(function(err, res) {
if (err) console.error(err); // Any error thrown during the removal of the datasets
// A JSON Array of Strings - representing the dataset_Ids which have been
// removed from the sync service.
console.log(res);
});10.7. $fh.sync.handleList
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
特定のデータセットのデータをデータセットバックエンドから一覧表示するハンドラー関数を定義します。
返されたデータが有効な JSON objects であることを確認してください。例えば、データオブジェクトは JSON Object 内では有効ではありません。
返されたデータ (またはネスト化されたオブジェクト) に_id フィールドがないことを確認してください。MongoDB は、_id フィールドが含まれているデータを保存しません。
10.7.1. 使用法
$fh.sync.handleList(dataset_id, function listHandler(dataset_id, query_params, meta_data, cb){});10.7.2. パラメーター
10.7.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.7.2.2. listHandler
- 説明: レコードを一覧表示する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
query_params
- 説明: リストの一部として使用するクエリパラメーター。null とすることも可能。
- タイプ: Object
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.7.3. 例
$fh.sync.handleList("todo", function(dataset_id, params, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// JSON object representing query parameters passed from the client.
// These can be used to restrict the data set returned.
console.log(params);
// The callback into the sync service to store the dataset
// cb(err, data)
cb(null, { // A JSON Object - representing the data
uid_1 : {/* data */},
uid_2 : {/* data */},
uid_3 : {/* data */}
});
});
// It is recommended that the handleList function converts data from the back end
// format into a full JSON Object.
// This is a sensible approach when reading data from relational and nonrelational
// databases, and works well for SOAP and XML data.
// However, it may not always be feasible - for example, when reading non structured data.
// In these cases, the recomened approach is to create a JSON object with a single
// key called “data” and set the value for this key to be the actual data.
// for example, xml data
/*
<dataset>
<row>
<userid>123456</userid>
<firstname>Joe</firstname>
<surname>Bloggs</surname>
<dob>1970-01-01</dob>
<gender>male</gender>
</row>
</dataset>
*/
/* json data
{
"123456" : {
"userid" : "123456",
"firstname" : "Joe",
"surname" : "Bloggs",
"dob" : "1970-01-01",
"gender" : "male"
}
}
*/
// And for non structured data:
/*
123456|Joe|Bloggs|1970-01-01|male
{
"123456" : {
"data" : "123456|Joe|Bloggs|1970-01-01|male"
}
}
*/10.7.4. $fh.sync.handleList (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.handleList(dataset_id, callback)
データセットのデータをバックエンドデータソースから一覧表示するハンドラー関数を定義します。データセットが初期化された後にこの API を呼び出してください。
10.7.4.1. 例
$fh.sync.handleList(dataset_id, function(dataset_id, params, cb, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// JSON object representing query parameters passed from the client.
// These can be used to restrict the data set returned.
console.log(params);
// The callback into the sync service to store the dataset
// cb(err, data)
cb(null, { // A JSON Object - representing the data
uid_1 : {/* data */},
uid_2 : {/* data */},
uid_3 : {/* data */}
});
});
// It is recommended that the handleList function converts data from the back end
// format into a full JSON Object.
// This is a sensible approach when reading data from relational and nonrelational
// databases, and works well for SOAP and XML data.
// However, it may not always be feasible - for example, when reading non structured data.
// In these cases, the recomened approach is to create a JSON object with a single
// key called “data” and set the value for this key to be the actual data.
// for example, xml data
/*
<dataset>
<row>
<userid>123456</userid>
<firstname>Joe</firstname>
<surname>Bloggs</surname>
<dob>1970-01-01</dob>
<gender>male</gender>
</row>
</dataset>
*/
/* json data
{
"123456" : {
"userid" : "123456",
"firstname" : "Joe",
"surname" : "Bloggs",
"dob" : "1970-01-01",
"gender" : "male"
}
}
*/
// And for non structured data:
/*
123456|Joe|Bloggs|1970-01-01|male
{
"123456" : {
"data" : "123456|Joe|Bloggs|1970-01-01|male"
}
}
*/10.8. $fh.sync.globalHandleList
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
データセットバックエンドからのデータを一覧表示するグローバルのハンドラー関数を定義します。
これは複数のデータセットで使用可能ですが、通常は handleList API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
返されたデータが有効な JSON objects であることを確認してください。例えば、データオブジェクトは JSON Object 内では有効ではありません。
返されたデータ (またはネスト化されたオブジェクト) に_id フィールドがないことを確認してください。MongoDB は、_id フィールドが含まれているデータを保存しません。
10.8.1. 使用法
$fh.sync.globalHandleList(function listHandler(dataset_id, query_params, meta_data, cb){});10.8.2. パラメーター
10.8.2.1. listHandler
- 説明: レコードを一覧表示する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
query_params
- 説明: リストの一部として使用するクエリパラメーター。null とすることも可能。
- タイプ: Object
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.8.3. 例
$fh.sync.globalHandleList(function(dataset_id, params, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// JSON object representing query parameters passed from the client.
// These can be used to restrict the data set returned.
console.log(params);
// The callback into the sync service to store the dataset
// cb(err, data)
cb(null, { // A JSON Object - representing the data
uid_1 : {/* data */},
uid_2 : {/* data */},
uid_3 : {/* data */}
});
});
// It is recommended that the handleList function converts data from the back end
// format into a full JSON Object.
// This is a sensible approach when reading data from relational and nonrelational
// databases, and works well for SOAP and XML data.
// However, it may not always be feasible - for example, when reading non structured data.
// In these cases, the recomened approach is to create a JSON object with a single
// key called “data” and set the value for this key to be the actual data.
// for example, xml data
/*
<dataset>
<row>
<userid>123456</userid>
<firstname>Joe</firstname>
<surname>Bloggs</surname>
<dob>1970-01-01</dob>
<gender>male</gender>
</row>
</dataset>
*/
/* json data
{
"123456" : {
"userid" : "123456",
"firstname" : "Joe",
"surname" : "Bloggs",
"dob" : "1970-01-01",
"gender" : "male"
}
}
*/
// And for non structured data:
/*
123456|Joe|Bloggs|1970-01-01|male
{
"123456" : {
"data" : "123456|Joe|Bloggs|1970-01-01|male"
}
}
*/10.8.4. $fh.sync.globalHandleList (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalHandleList(callback)
$fh.sync.handleList と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.handleList でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.8.4.1. 例
$fh.sync.globalHandleList(function(dataset_id, params, cb, meta_data){
//list data for the specified dataset_id
});10.9. $fh.sync.handleCreate
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
特定のデータセットでデータセットバックエンドに単一のデータ行を作成するハンドラー関数を定義します。
10.9.1. 使用法
$fh.sync.handleCreate(dataset_id, function createHandler(dataset_id, data, meta_data, cb){});10.9.2. パラメーター
10.9.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.9.2.2. createHandler
- 説明: レコードを作成する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
data
- 説明: 作成するデータ
- タイプ: Object
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.9.3. 例
$fh.sync.handleCreate("todo", function(dataset_id, data, meta_data, cb){
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Row of data to create
console.log(data);
// Sample back-end storage call
var savedData = saveData(data);
var res = {
"uid": savedData.uid, // Unique Identifier for row
"data": savedData.data // The created data record - including any system or UID fields added during the create process
};
// Callback function for when the data has been created, or if theres an error
return cb(null, res);
});10.9.4. $fh.sync.handleCreate (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.handleCreate(dataset_id, callback)
バックエンドで単一行のデータを作成するハンドラー関数を定義します。データセットが初期化された後に呼び出してください。
10.9.4.1. 例
// data source for a dataset.
$fh.sync.handleCreate(dataset_id, function(dataset_id, data, cb, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Row of data to create
console.log(data);
// Sample back-end storage call
var savedData = saveData(data);
var res = {
"uid": savedData.uid, // Unique Identifier for row
"data": savedData.data // The created data record - including any system or UID fields added during the create process
};
// Callback function for when the data has been created, or if theres an error
return cb(null, res);
});10.10. $fh.sync.globalHandleCreate
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
バックエンドで単一行のデータを作成するグローバルのハンドラー関数を定義します。
これは複数のデータセットで使用可能ですが、handleCreate API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.10.1. 使用法
$fh.sync.globalHandleCreate(function createHandler(dataset_id, data, meta_data, cb){});10.10.2. パラメーター
10.10.2.1. createHandler
- 説明: レコードを作成する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
data
- 説明: 作成するデータ
- タイプ: Object
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.10.3. 例
$fh.sync.globalHandleCreate(function(dataset_id, data, meta_data, cb){
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Row of data to create
console.log(data);
// Sample back-end storage call
var savedData = saveData(data);
var res = {
"uid": savedData.uid, // Unique Identifier for row
"data": savedData.data // The created data record - including any system or UID fields added during the create process
};
// Callback function for when the data has been created, or if theres an error
return cb(null, res);
});10.10.4. $fh.sync.globalHandleCreate (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalHandleCreate(callback)
$fh.sync.handleCreate と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.handleCreate でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.10.4.1. 例
$fh.sync.globalHandleCreate(function(dataset_id, data, cb, meta_data){
//create data for the specified dataset_id
});10.11. $fh.sync.handleRead
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
特定のデータセットでデータセットバックエンドから単一行のデータを読み取るハンドラー関数を定義します。
10.11.1. 使用法
$fh.sync.handleRead(dataset_id, function readHandler(dataset_id, uid, meta_data, cb){});10.11.2. パラメーター
10.11.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.11.2.2. readHandler
- 説明: レコードを読み取る際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
uid
- 説明: 読み取るレコードの一意の ID
- タイプ: 文字列
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.11.3. 例
$fh.sync.handleRead("todo", function(dataset_id, uid, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to read
console.log(uid);
// Sample back-end storage call
var data = readData(uid);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the row of data
return cb(null, data);
});10.11.4. $fh.sync.handleRead (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.handleRead(dataset_id, callback)
バックエンドから単一行のデータを読み取るハンドラー関数を定義します。データセットが初期化された後に呼び出してください。
10.11.4.1. 例
// data source for a dataset
$fh.sync.handleRead(dataset_id, function(dataset_id, uid, cb, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to read
console.log(uid);
// Sample back-end storage call
var data = readData(uid);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the row of data
return cb(null, data);
});10.12. $fh.sync.globalHandleRead
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
データセットバックエンドから単一行のデータを読み取るグローバルのハンドラー関数を定義します。
これは複数のデータセットで使用可能ですが、handleRead API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.12.1. 使用法
$fh.sync.globalHandleRead(function readHandler(dataset_id, uid, meta_data, cb){});10.12.2. パラメーター
10.12.2.1. readHandler
- 説明: レコードを読み取る際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
uid
- 説明: 読み取るレコードの一意の ID
- タイプ: 文字列
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.12.3. 例
$fh.sync.globalHandleRead(function(dataset_id, uid, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to read
console.log(uid);
// Sample back-end storage call
var data = readData(uid);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the row of data
return cb(null, data);
});10.12.4. $fh.sync.globalHandleRead (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalHandleRead(callback)
$fh.sync.handleRead と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.handleRead でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.12.4.1. 例
$fh.sync.globalHandleRead(function(dataset_id, uid, cb, meta_data){
//read data for the specified dataset_id and uid
});10.13. $fh.sync.handleUpdate
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
特定のデータセットでデータセットバックエンドでの単一行のデータを更新するハンドラー関数を定義します。
同期サーバーは現行の値がバックエンドの値と一致することをチェックして、データが更新可能であることを確認します。値が一致しない場合は、更新操作は実行されず、競合が発生します。
10.13.1. 使用法
$fh.sync.handleUpdate(dataset_id, function updateHandler(dataset_id, uid, data, meta_data, cb){});10.13.2. パラメーター
10.13.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.13.2.2. updateHandler
- 説明: レコードを更新する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
uid
- 説明:更新するレコードの一意の ID
- タイプ: 文字列
data
- 説明: 新規の日付フィールド
- タイプ: Object
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.13.3. 例
$fh.sync.handleUpdate("todo", function(dataset_id, uid, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to update
console.log(uid);
// Row of data to update
console.log(data);
// Sample back-end storage call
var updatedData = updateData(uid, data);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the updated row of data
return cb(null, updatedData);
});10.13.4. $fh.sync.handleUpdate (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.handleUpdate(dataset_id, callback)
バックエンドから単一行のデータを更新するハンドラー関数を定義します。データセットが初期化された後に呼び出してください。
10.13.4.1. 例
// data source for a dataset.
// The sync service will verify that the update can proceed
// (that is, collision detection) before it invokes the update function.
$fh.sync.handleUpdate(dataset_id, function(dataset_id, uid, data, cb, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to update
console.log(uid);
// Row of data to update
console.log(data);
// Sample back-end storage call
var updatedData = updateData(uid, data);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the updated row of data
return cb(null, updatedData);
});10.14. $fh.sync.globalHandleUpdate
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
データセットバックエンド上の単一行データを更新するグローバルのハンドラー関数を定義します。
これは複数のデータセットで使用可能ですが、handleUpdate API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
同期サーバーは現行の値がデータセットバックエンドの値と一致することをチェックして、データが更新可能であることを確認します。値が一致しない場合は、更新操作は実行されず、競合が発生します。
10.14.1. 使用法
$fh.sync.globalHandleUpdate(function updateHandler(dataset_id, uid, data, meta_data, cb){});10.14.2. パラメーター
10.14.2.1. updateHandler
- 説明: レコードを更新する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
uid
- 説明:更新するレコードの一意の ID
- タイプ: 文字列
data
- 説明: 新規の日付フィールド
- タイプ: Object
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.14.3. 例
$fh.sync.globalHandleUpdate(function(dataset_id, uid, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to update
console.log(uid);
// Row of data to update
console.log(data);
// Sample back-end storage call
var updatedData = updateData(uid, data);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the updated row of data
return cb(null, updatedData);
});10.14.4. $fh.sync.globalHandleUpdate (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalHandleUpdate(callback)
$fh.sync.handleUpdate と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.handleUpdate でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.14.4.1. 例
$fh.sync.globalHandleUpdate(function(dataset_id, uid, data, cb, meta_data){
//update data for the specified dataset_id and uid
});10.15. $fh.sync.handleDelete
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
特定のデータセットでデータセットバックエンドから単一行のデータを削除するハンドラー関数を定義します。同期サーバーは、行が最新であり、競合が発生しないことを確認し、データを削除可能にします。
10.15.1. 使用法
$fh.sync.handleDelete(dataset_id, function deleteHandler(dataset_id, uid, meta_data, cb){});10.15.2. パラメーター
10.15.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.15.2.2. deleteHandler
- 説明: レコードを削除する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
uid
- 説明:削除するレコードの一意の ID
- タイプ: 文字列
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.15.3. 例
$fh.sync.handleDelete("todo", function(dataset_id, uid, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to update
console.log(uid);
// Sample back-end storage call
var deletedData = deleteData(uid);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the deleted row of data
return cb(null, deletedData);
});10.15.4. $fh.sync.handleDelete (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.handleDelete(dataset_id, callback)
バックエンドから単一行のデータを削除するハンドラー関数を定義します。データセットが初期化された後に呼び出してください。
10.15.4.1. 例
// data source for a dataset.
// The sync service will verify that the delete can proceed
// (that is, collision detection) before it invokes the delete function.
$fh.sync.handleDelete(dataset_id, function(dataset_id, uid, cb, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to update
console.log(uid);
// Sample back-end storage call
var deletedData = deleteData(uid);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the deleted row of data
return cb(null, deletedData);
});10.16. $fh.sync.globalHandleDelete
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
データセットバックエンドから単一行データを削除するグローバルのハンドラー関数を定義します。
これは複数のデータセットで使用可能ですが、handleDelete API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
同期サーバーは、行が最新であり、競合が発生しないことを確認し、データを削除可能にします。
10.16.1. 使用法
$fh.sync.globalHandleDelete(function deleteHandler(dataset_id, uid, meta_data, cb){});10.16.2. パラメーター
10.16.2.1. deleteHandler
- 説明: レコードを削除する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
uid
- 説明:削除するレコードの一意の ID
- タイプ: 文字列
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.16.3. 例
$fh.sync.globalHandleDelete(function(dataset_id, uid, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique Identifier for row to update
console.log(uid);
// Sample back-end storage call
var deletedData = deleteData(uid);
/* sample response
{
"userid": "1234",
"name": "Jane Bloggs",
"age": 27
}
*/
// The callback into the sync service to return the deleted row of data
return cb(null, deletedData);
});10.16.4. $fh.sync.globalHandleDelete (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalHandleDelete(callback)
$fh.sync.handleDelete と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.handleDelete でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.16.4.1. 例
$fh.sync.globalHandleDelete(function(dataset_id, uid, cb, meta_data){
//delete data for the specified dataset_id and uid
});10.17. $fh.sync.handleCollision
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
特定のデータセットのデータ競合を処理するハンドラー関数を定義します。
競合はこの関数で解決するか、このまま保持してこれ以降に見直すことができます。
10.17.1. 使用法
$fh.sync.handleCollision(dataset_id, function collisionHandler(dataset_id, hash, timestamp, uid, pre, post, meta_data){});10.17.2. パラメーター
10.17.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.17.2.2. collisionHandler
- 説明: 競合が発生した際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
hash
- 説明: 競合の一意のハッシュ値
- タイプ: 文字列
timestamp
- 説明: クライアント上で変更が発生した際のタイムスタンプ (ミリ秒単位)。
- タイプ: 数字
uid
- 説明:保留中レコードの一意の ID
- タイプ: 文字列
pre
- 説明: 変更前のデータ
- タイプ: Object
post
- 説明: 変更後のデータ
- タイプ: Object
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
10.17.3. 例
// Typically a collision handler will write the data record to a collisions table
// which is reviewed by a user who can manually reconcile the collisions.
$fh.sync.handleCollision("todo", function(dataset_id, hash, timestamp, uid, pre, post, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique hash value identifying the collision
console.log(hash);
// Date / time that update was created on client device
console.log(timestamp);
// Unique Identifier for row
console.log(uid);
// The data row the client started with
console.log(pre);
//The data row the client tried to write
console.log(post);
// sample back-end storage call
saveCollisionData(dataset_id, hash, timestamp, uid, pre, post);
});10.17.4. $fh.sync.handleCollision (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.handleCollision(dataset_id, callback)
データ競合 (古い更新) に対処するハンドラー関数を定義します。データセットが初期化された後に呼び出してください。
10.17.4.1. 例
// Typically a collision handler will write the data record to a collisions table
// which is reviewed by a user who can manually reconcile the collisions.
$fh.sync.handleCollision(dataset_id, function(dataset_id, hash, timestamp, uid, pre, post, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique hash value identifying the collision
console.log(hash);
// Date / time that update was created on client device
console.log(timestamp);
// Unique Identifier for row
console.log(uid);
// The data row the client started with
console.log(pre);
//The data row the client tried to write
console.log(post);
// sample back-end storage call
saveCollisionData(dataset_id, hash, timestamp, uid, pre, post);
});10.18. $fh.sync.globalHandleCollision
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
データ競合を処理するグローバルハンドラー関数を定義します。
競合はこの関数で解決するか、このまま保持してこれ以降に見直すことができます。
これは複数のデータセットで使用可能ですが、handleCollision API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.18.1. 使用法
$fh.sync.globalHandleCollision(function collisionHandler(dataset_id, hash, timestamp, uid, pre, post, meta_data){});10.18.2. パラメーター
10.18.2.1. collisionHandler
- 説明: 競合が発生した際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
hash
- 説明: 競合の一意のハッシュ値
- タイプ: 文字列
timestamp
- 説明: クライアント上で変更が発生した際のタイムスタンプ (ミリ秒単位)。
- タイプ: 数字
uid
- 説明:保留中レコードの一意の ID
- タイプ: 文字列
pre
- 説明: 変更前のデータ
- タイプ: Object
post
- 説明: 変更後のデータ
- タイプ: Object
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
10.18.3. 例
// Typically a collision handler will write the data record to a collisions table
// which is reviewed by a user who can manually reconcile the collisions.
$fh.sync.globalHandleCollision(function(dataset_id, hash, timestamp, uid, pre, post, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// Unique hash value identifying the collision
console.log(hash);
// Date / time that update was created on client device
console.log(timestamp);
// Unique Identifier for row
console.log(uid);
// The data row the client started with
console.log(pre);
//The data row the client tried to write
console.log(post);
// sample back-end storage call
saveCollisionData(dataset_id, hash, timestamp, uid, pre, post);
});10.18.4. $fh.sync.globalHandleCollision (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalHandleCollision(callback)
$fh.sync.handleCollision と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.handleCollision でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.18.4.1. 例
$fh.sync.globalHandleCollision(function(dataset_id, hash, timestamp, uid, pre, post, meta_data){
});10.19. $fh.sync.listCollisions
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
データセットの現在の競合一覧を返すハンドラー関数を定義します。
10.19.1. 使用法
$fh.sync.listCollisions(dataset_id, function listCollisionsHandler(dataset_id, meta_data, cb){});10.19.2. パラメーター
10.19.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.19.2.2. listCollisionsHandler
- 説明: 競合を一覧表示する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.19.3. 例
// This would usually be used by an administration console where a user is
// manually reviewing & resolving collisions.
$fh.sync.listCollisions("todo", function(dataset_id, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// sample back-end storage call
var collisions = getCollisions(dataset_id);
/* sample response:
{
"collision_hash_1" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
},
"collision_hash_2" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
},
"collision_hash_2" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
}
}
*/
// The callback into the sync service to return the list of known collisions
return cb(null, collisions);
});10.19.4. $fh.sync.listCollisions (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.listCollisions(dataset_id, callback)
競合の現在の一覧を返すハンドラー関数を定義します。データセットが初期化された後に呼び出してください。
10.19.4.1. 例
// This would usually be used by an administration console where a user is
// manually reviewing & resolving collisions.
$fh.sync.listCollisions(dataset_id, function(dataset_id, cb, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// sample back-end storage call
var collisions = getCollisions(dataset_id);
/* sample response:
{
"collision_hash_1" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
},
"collision_hash_2" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
},
"collision_hash_2" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
}
}
*/
// The callback into the sync service to return the list of known collisions
return cb(null, collisions);
});"collision_hash" は競合を一意に定義するハッシュ値です。この値は、"handleCollision" 関数で競合が最初に作成される際に、"hash" パラメーターとして渡されています。
10.20. $fh.sync.globalListCollisions
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
現在の競合一覧を返すグローバルハンドラー関数を定義します。
これは複数のデータセットで使用可能ですが、listCollisions API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.20.1. 使用法
$fh.sync.globalListCollisions(function listCollisionsHandler(dataset_id, meta_data, cb){});10.20.2. パラメーター
10.20.2.1. listCollisionsHandler
- 説明: 競合を一覧表示する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.20.3. 例
// This would usually be used by an administration console where a user is
// manually reviewing & resolving collisions.
$fh.sync.globalListCollisions(function(dataset_id, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// sample back-end storage call
var collisions = getCollisions(dataset_id);
/* sample response:
{
"collision_hash_1" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
},
"collision_hash_2" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
},
"collision_hash_2" : {
"uid": "<uid_of_data_row>",
"timestamp": "<timestamp_value_passed_to_handleCollision_fn>",
"pre": "<pre_data_record_passed_to_handleCollision_fn>",
"post": "<post_data_record_passed_to_handleCollision_fn>"
}
}
*/
// The callback into the sync service to return the list of known collisions
return cb(null, collisions);
});10.20.4. $fh.sync.globalListCollisions (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalListCollisions(callback)
$fh.sync.listCollisions と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.listCollisions でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.20.4.1. 例
$fh.sync.globalListCollisions(function(dataset_id, cb, meta_data){
});10.21. $fh.sync.removeCollision
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
データセットの競合を削除するハンドラー関数を定義します。
10.21.1. 使用法
$fh.sync.removeCollision(dataset_id, function removeCollisionHandler(dataset_id, collision_hash, meta_data, cb){});10.21.2. パラメーター
10.21.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.21.2.2. removeCollisionHandler
- 説明: 競合を削除する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
collision_hash
- 説明: 競合の一意のハッシュ
- タイプ: 文字列
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.21.3. 例
// This would usually be used by an administration console where a user is
// manually reviewing & resolving collisions.
$fh.sync.removeCollision("todo", function(dataset_id, collision_hash, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// sample back-end storage call
removeCollision(collision_hash);
// The callback into the sync service to return the delete row of data
return cb(null);
});10.21.4. $fh.sync.removeCollision (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.removeCollision(dataset_id, callback)
競合一覧からある競合を削除するハンドラー関数を定義します。データセットが初期化された後に呼び出してください。
10.21.4.1. 例
// This would usually be used by an administration console where a user is
// manually reviewing & resolving collisions.
$fh.sync.removeCollision(dataset_id, function(dataset_id, collision_hash, cb, meta_data) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// sample back-end storage call
removeCollision(collision_hash);
// The callback into the sync service to return the delete row of data
return cb(null);
});10.22. $fh.sync.globalRemoveCollision
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
競合を削除するグローバルハンドラー関数を定義します。
これは複数のデータセットで使用可能ですが、removeCollision API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.22.1. 使用法
$fh.sync.globalRemoveCollision(function removeCollisionHandler(dataset_id, collision_hash, meta_data, cb){});10.22.2. パラメーター
10.22.2.1. removeCollisionHandler
- 説明: 競合を削除する際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
collision_hash
- 説明: 競合の一意のハッシュ
- タイプ: 文字列
meta_data
- 説明: データに関連付けるメタデータ。null とすることも可能。
- タイプ: Object
cb
- 説明: コールバック関数
- タイプ: 関数
10.22.3. 例
// This would usually be used by an administration console where a user is
// manually reviewing & resolving collisions.
$fh.sync.globalRemoveCollision(function(dataset_id, collision_hash, meta_data, cb) {
// The dataset identifier that this function was defined for
console.log(dataset_id);
// sample back-end storage call
removeCollision(collision_hash);
// The callback into the sync service to return the delete row of data
return cb(null);
});10.22.4. $fh.sync.globalRemoveCollision (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalRemoveCollision(callback)
$fh.sync.removeCollision と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.removeCollision でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.22.4.1. 例
$fh.sync.globalRemoveCollision(function(dataset_id, collision_hash, cb, meta_data){
});10.23. $fh.sync.interceptRequest
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
指定されたデータセットの同期リクエストを処理される前にインターセプトします。クライアント ID のチェックや認証を検証する際にこの API を使用します。
10.23.1. 使用法
$fh.sync.interceptRequest(dataset_id, function requestInterceptor(dataset_id, interceptorParams, cb){});10.23.2. パラメーター
10.23.2.1. dataset_id
- 説明: データセットの ID
- タイプ: 文字列
10.23.2.2. requestInterceptor
- 説明: クライアントから同期リクエストを受け付けた際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID
- タイプ: 文字列
interceptorParams
- 説明: リクエストに関連付けられたパラメーター
- タイプ: Object
サポートされるキー
query_params
- 説明: リクエストに関連付けられたクエリーパラメーター
- タイプ: Object
meta_data
- 説明: リクエストに関連付けられたメタデータ
- タイプ: Object
cb
説明: コールバック関数
null 以外の応答で呼び出されると、同期リクエストは拒否されます。
- タイプ: 関数
10.23.3. 例
$fh.sync.interceptRequest("todo", function(dataset_id, interceptorParams, cb){
var query_params = interceptorParams.query_params; //the query_params specified in the client $fh.sync.manage
var meta_data = interceptorParams.meta_data; //the meta_data specified in the client $fh.sync.manage
var validUser = function(qp, meta){
//implement user authentication and return true or false
};
if(validUser(query_params, meta_data)){
return cb(null);
} else {
// Return a non null response to cause the sync request to fail.
return cb({error: 'invalid user'});
}
});10.23.4. $fh.sync.interceptRequest (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.interceptRequest(dataset_id, callback);
指定されたデータセットの同期リクエストをインターセプトします。クライアント ID のチェックや認証の検証に便利です。
10.23.4.1. 例
$fh.sync.interceptRequest(dataset_id, function(dataset_id, interceptorParams, cb){
var query_params = interceptorParams.query_params; //the query_params specified in the client $fh.sync.manage
var meta_data = interceptorParams.meta_data; //the meta_data specified in the client $fh.sync.manage
var validUser = function(qp, meta){
//implement user authentication and return true or false
};
if(validUser(query_params, meta_data)){
return cb(null);
} else {
// Return a non null response to cause the sync request to fail.
return cb({error: 'invalid user'});
}
});10.24. $fh.sync.setRecordHashFn
単一レコードのハッシュ値を生成する関数を定義します。キャッシュされたレコードをデータセットバックエンドからの最新のものと比較する際には、レコードハッシュが使用されます。
ハッシュが一致すればレコードは同一のものとみなされます (そのため、キャッシュまたはクライアントを更新する必要がありません)。デフォルトの実装では、レコードの並び替え stringify を行い、その sha-1 を計算するという保守的なアプローチを取っています。
ただし、CPU の時間を節約するには、これを上書きしてください。
重要 サーバー側で更新されたフィールドは、ハッシュ計算での使用は避けてください。例えば、データセットバックエンドでの保存時に更新された lastModified フィールドがデータセットにある場合は、ハッシュ計算からこれを省いてください。これを省かないと、この後の更新で競合が発生する可能性が高くなります。データがクライアントと同期されるまでは、クライアントはそのフィールドの新たな値を認識しないためです。
この関数を使用すると、デフォルト実装を上書きすることができます。
10.24.1. 使用法
$fh.sync.setRecordHashFn(dataset_id, function generateHash(dataset_id, record){});10.24.2. パラメーター
10.24.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.24.2.2. generateHash
- 説明: データセットのハッシュ生成に使用される関数
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
record
- 説明:レコード
- タイプ: Object
10.24.3. Returns
レコードのハッシュ値。
10.24.4. 例
$fh.sync.setRecordHashFn("todo", function(dataset_id, record){
return record.lastModified;
});10.25. $fh.sync.setGlobalHashFn
データセットのグローバルハッシュを計算する関数を定義します。グローバルハッシュは、データセットに変更があったかどうかを判断するために使用されます。
重要 サーバー側で更新されたフィールドは、ハッシュ計算での使用は避けてください。例えば、データセットバックエンドでの保存時に更新された lastModified フィールドがデータセットにある場合は、ハッシュ計算からこれを省いてください。これを省かないと、この後の更新で競合が発生する可能性が高くなります。データがクライアントと同期されるまでは、クライアントはそのフィールドの新たな値を認識しないためです。
10.25.1. 使用法
$fh.sync.setGlobalHashFn(dataset_id, function generateHash(dataRecordHashes){});10.25.2. パラメーター
10.25.2.1. dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
10.25.2.2. generateHash
- 説明: データセットのハッシュ生成に使用される関数
- タイプ: 関数
呼び出されるパラメーター:
dataRecordHashes
- 説明: データセット内の全レコードの全ハッシュのアレイ
- タイプ: アレイ
10.25.3. Returns
データセットのグローバルハッシュ値。
10.25.4. 例
$fh.sync.setGlobalHashFn("todo", function(dataRecordHashes){
return dataRecordHashes.join('');
});10.26. $fh.sync.globalInterceptRequest
注記: RHMAP 3.19 には fh-mbaas-api バージョン 7 が含まれています。ご使用の package.json ファイルにある fh-mbaas-api のバージョンが 7.0.0 より前の場合は、以前のバージョンのセクション を参照してください。
全同期リクエストを処理される前にインターセプトします。クライアント ID のチェックや認証を検証する際にこの API を使用します。
これは複数のデータセットで使用可能ですが、interceptRequest API を使用するデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.26.1. 使用法
$fh.sync.globalInterceptRequest(function requestInterceptor(dataset_id, interceptorParams, cb){});10.26.2. パラメーター
10.26.2.1. requestInterceptor
- 説明: クライアントから同期リクエストを受け付けた際に呼び出される関数。
- タイプ: 関数
呼び出されるパラメーター:
dataset_id
- 説明: データセットの ID。
- タイプ: 文字列
interceptorParams
- 説明: リクエストに関連付けられたパラメーター
- タイプ: Object
サポートされるキー
query_params
- 説明: リクエストに関連付けられたクエリーパラメーター
- タイプ: Object
meta_data
- 説明: リクエストに関連付けられたメタデータ
- タイプ: Object
cb
説明: コールバック関数
null 以外の応答で呼び出されると、同期リクエストは拒否されます。
- タイプ: 関数
10.26.3. 例
$fh.sync.globalInterceptRequest(function(dataset_id, interceptorParams, cb){
var query_params = interceptorParams.query_params; //the query_params specified in the client $fh.sync.manage
var meta_data = interceptorParams.meta_data; //the meta_data specified in the client $fh.sync.manage
var validUser = function(qp, meta){
//implement user authentication and return true or false
};
if(validUser(query_params, meta_data)){
return cb(null);
} else {
// Return a non null response to cause the sync request to fail.
return cb({error: 'invalid user'});
}
});10.26.4. $fh.sync.globalInterceptRequest (バージョン 7.0.0 以前の fh-mbaas-api 向け)
$fh.sync.globalInterceptRequest(callback)
$fh.sync.interceptRequest と似ていますが、ハンドラーをグローバルに設定することで複数のデータセットが同一のハンドラー関数を使用できるようになります。グローバルハンドラーは、$fh.sync.interceptRequest でデータセットにハンドラーが割り当てられていない場合にのみ使用されます。
10.26.4.1. 例
$fh.sync.globalInterceptRequest(function(dataset_id, interceptorParams, cb){
});10.27. $fh.sync.getEventEmitter
同期サーバーのイベントエミッターを取得します。
fh-mbaas-api からの同期を使用している場合は、$fh.events の場合と同様のエミッターインスタンスが返されます。
10.27.1. 使用法
var emitter = $fh.sync.getEventEmitter();
10.27.2. パラメーター
なし
10.27.3. 例
var emitter = $fh.sync.getEventEmitter();
emitter.once('sync:ready', function(){
//do something here
});
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.