Object の作成
Object を作成するには、格納したい JSON データを文字列の形式で指定して API を呼び出します。Object の格納先の Bucket は、任意のスコープを指定できます。ただし、格納先 Bucket に対する Object 追加の権限を Thing が有している必要がある点に注意してください。
Bucket は、最初の Object を作成する際、自動的に作成されます。
Object の作成は、ID を Kii Cloud で自動的に発行する方法と、Thing 上のプログラムで ID を指定する方法の 2 通りをサポートしています。
ID を自動発行して Object を作成
Object を作成するサンプルコードを以下に示します。
/* Set KiiObject parameters. */
#define OBJECT_DATA "{\"power\":true, \"temperature\":25, \"status\":\"NORMAL\"}"
#define CONTENT_TYPE NULL
char object_id[KII_OBJECTID_SIZE + 1];
int ret;
/* Set bucket parameters. */
kii_bucket_t bucket;
memset(&bucket, 0x00, sizeof(kii_bucket_t));
bucket.scope = KII_SCOPE_THING;
bucket.bucket_name = "myBucket";
bucket.scope_id = "VENDOR_THING_ID:rBnvSPOXBDF9r29GJeGS";
/* Create a KiiObject. */
ret = kii_object_create(&kii, &bucket, OBJECT_DATA, CONTENT_TYPE, object_id);
if (ret != 0) {
/* Handle the error. */
return;
}
printf("object ID:%s\n", object_id);
Object を作成する Bucket は kii_bucket_t
構造体で指定します。設定方法を以下に示します。
メンバー | 説明 |
---|---|
scope |
アクセス先のスコープを指定します。 アプリケーションスコープ: KII_SCOPE_APP を指定します。グループスコープ: KII_SCOPE_GROUP を指定します。ユーザースコープ: KII_SCOPE_USER を指定します。Thing スコープ: KII_SCOPE_THING を指定します。 |
bucket_name |
Bucket 名を文字列で指定します。 |
scope_id |
Bucket が存在するスコープを特定するための情報で、REST API の パスの表現 中、/buckets/ の直前に来る文字列を指定します。アプリケーションスコープ:指定不要です。指定しても無視されます。 グループスコープ:グループ ID を指定します。 ユーザースコープ:ユーザー名などの ユーザーを特定する情報 を指定します。 Thing スコープ:thingID などの Thing を特定する情報 を指定します。 |
今回のサンプルコードでは、Thing スコープにある myBucket
という Bucket を指定しています。この例では、vendorThingID rBnvSPOXBDF9r29GJeGS
によって アクセストークンを取得 し、kii_t
を初期化している状態を想定しています。kii_bucket_t
構造体の scope_id
メンバーでは、VENDOR_THING_ID:rBnvSPOXBDF9r29GJeGS
というスコープ ID を指定しているため、アクセストークンを持っている Thing の Thing スコープにある Bucket に Object を作成します。
kii_object_create
関数を呼び出すと、Kii Cloud との通信が行われ、OBJECT_DATA
で指定した JSON 文字列を持った Object が作成されます。関数からは、Object の ID が object_id
に返されます。
格納できるデータの最大サイズは JSON 形式で表現した状態で Unicode 換算で 65534 文字までです(サイズには Kii Cloud が内部で使用するフィールドも含まれます)。
kii_object_create
の第 4 引数は、Object のメディアタイプを指定します。Object のメディアタイプには "application/json" か "application/vnd.{APPID}.{DATATYPE}" が指定できます。後者の場合、{DATA_TYPE} には任意の値が利用可能です。省略する場合は NULL を指定できます。
Object アクセスのヒント
書き込んだはずの Object が参照できない:
Bucket のスコープが意図したとおりかどうか、ご確認ください。
書き込みと読み込みを異なるスコープで行うと、Bucket 名が同じであっても書き込んだ内容を取得できません。開発者ポータルのデータブラウザを使って読み込んだ場合でも、同様です。
たとえば、アプリケーションスコープの
myBucket
に作成したデータは、ユーザースコープのmyBucket
から読み込もうとしても、結果が得られません。
Bucket 一覧機能の実装ヒント
Bucket 一覧の機能が必要な場合、アプリ側での実装が必要となります。
通常、Bucket は Bucket 名を使ってプログラムから固定的にアクセスするため、一覧が必要となるケースはあまりないはずです。動的に Bucket を生成するような特殊なケースで一覧が必要な場合は、アプリケーションスコープに Bucket 名の一覧の情報を格納するなどの方法をとれます。実装方法は、ユーザー一覧の実装方法 を参考にしてください。
位置情報の利用
位置情報を保存するためのデータタイプとして GeoPoint が利用できます。GeoPoint の指定方法は、REST API での説明をご覧ください。
なお、GeoPoint は JSON のデータ表現だけの機能ではなく、指定した地点からの距離や範囲での検索機能をサポートしています。検索機能の利用方法は、REST API の KiiObject の検索 をご覧ください。
ID を指定して Object を作成
明示的に ID を指定して Object を作成することもできます。
以下に、Object を ID を指定して作成する例を挙げます。
/* Set KiiObject parameters. */
#define OBJECT_ID "STATUS_TEMPERATURE"
#define OBJECT_DATA "{\"power\":true, \"temperature\":25, \"status\":\"NORMAL\"}"
#define CONTENT_TYPE NULL
int ret;
/* Set bucket parameters. */
kii_bucket_t bucket;
memset(&bucket, 0x00, sizeof(kii_bucket_t));
bucket.scope = KII_SCOPE_THING;
bucket.bucket_name = "myBucket";
bucket.scope_id = "VENDOR_THING_ID:rBnvSPOXBDF9r29GJeGS";
/* Create a KiiObject. */
ret = kii_object_create_with_id(&kii, &bucket, OBJECT_ID, OBJECT_DATA, CONTENT_TYPE);
if (ret != 0) {
/* Handle the error. */
return;
}
kii_object_create_with_id
関数の第 3 引数で Object の ID を指定します。ここでは、STATUS_TEMPERATURE
という固定の ID を指定して Object を作成しています。使用可能な ID のパターンについては Kii Cloud SDK for Android の Javadoc を参考にしてください。
その他のパラメーターの指定方法は、kii_object_create
関数と同様です。