参照先フィールドを含めたレコード取得API
機能概要
従来のレコード取得APIにおいては、参照先情報も含めて取得する場合は、
参照元DBのレコードを一度取得し、別途、参照先情報をリクエストする必要がありましたが、
新たに追加された参照先フィールドを含めたレコード取得APIを活用することで、
参照元DBのフィールドに加え、参照先DBのフィールドや参照先DBのさらに参照先のフィールド値を1リクエストでまとめて取得できるようになります。
APIの記述方法についてはサンプルプログラムやAPIリファレンスをご覧ください。
例えば、以下のようなことが実現できます。
・セミナーマスタとセミナー申込DBがある場合に、セミナー情報も含んだ申込履歴情報を1リクエストで取得する。
・セミナーマスタとセミナー講師マスタ、セミナー申込DBがある場合に、セミナー情報と講師情報を含んだ申込履歴情報を1リクエストで取得する。
仕様
APIの種類
説明 | メソッド | エンドポイント |
---|---|---|
参照先フィールドを含めたレコード一覧を取得 | GET | /apps/{app}/dbs/{db}/records/join |
参照先フィールドを含めたレコードを取得 | GET | /apps/{app}/dbs/{db}/records/{recordId}/join |
フィールド指定形式
参照先DBのフィールドを取得する場合は{参照フィールド識別名}.{参照先DBのフィールド識別名}の形式で記載します。
参照先DBのフィールド指定例
fields=referenceField.textField
参照先DBのさらに参照先のフィールドを取得する場合は{参照フィールド識別名}.{参照先DBの参照フィールド識別名}.{先の先のフィールド識別名}の形式で記載します。
参照先DBの参照先のフィールド指定例
fields=referenceField_1.referenceField_2.textField
出力形式
参照先フィールドを含めたレコード一覧を取得 Response例
{ "items": [ { "_id": "1", "_revision": "1", "_createdBy": { ... }, "_createdAt": "2023-03-24T05:38:25Z", "_updatedBy": { ... }, "_updatedAt": "2023-03-24T05:39:42Z" "textField": "text", "singleReferenceField": "1", "singleReferenceField._id": "1", "singleReferenceField.textField": "text", "multiReferenceField": ["1","2"], "multiReferenceField._id": ["1","2"], "multiReferenceField.textField": ["text",null], "singleReferenceField.singleReferenceField_1": "1" "singleReferenceField.singleReferenceField_1._id": "1" "singleReferenceField.singleReferenceField_1.textField": "text" } ], "options": {}, "prevOffset": null, "nextOffset": null, "totalCount": 1 }
Response取得例
$decoded = json_decode($response, true); $field = $decoded["items"][0]["textField"]; $single_refField = $decoded["items"][0]["singleReferenceField.textField"]; $multi_refField = $decoded["items"][0]["multiReferenceField.textField"][0]; $ref_refField = $decoded["items"][0]["singleReferenceField.singleReferenceField_1.textField"];
参照先フィールドを含めたレコード Response例
{ "item": { "_id": "1", "_revision": "1", "_createdBy": { ... }, "_createdAt": "2023-03-24T05:38:25Z", "_updatedBy": { ... }, "_updatedAt": "2023-03-24T05:39:42Z" "textField": "text", "singleReferenceField": "1", "singleReferenceField._id": "1", "singleReferenceField.textField": "text", "multiReferenceField": ["1","2"], "multiReferenceField._id": ["1","2"], "multiReferenceField.textField": ["text",null], "singleReferenceField.singleReferenceField_1": "1" "singleReferenceField.singleReferenceField_1._id": "1" "singleReferenceField.singleReferenceField_1.textField": "text" }, "options": {} }
Response取得例
$decoded = json_decode($response, true); $field = $decoded["item"]["textField"]; $single_refField = $decoded["item"]["singleReferenceField.textField"]; $multi_refField = $decoded["item"]["multiReferenceField.textField"][0]; $ref_refField = $decoded["item"]["singleReferenceField.singleReferenceField_1.textField"];
セレクトフィールド、マルチセレクトフィールドのラベル出力例
optionのオブジェクトとして出力されます。
"options": { "selectField": { "1": "ラベル1", "2": "ラベル2", "3": "ラベル3" }, "singleReferenceField.selectField": { "1": "ラベルa", "2": "ラベルb", "3": "ラベルc" }, "singleReferenceField.singleReferenceField_1.selectField": { "1": "ラベルI", "2": "ラベルII", "3": "ラベルIII" }, "multiReferenceField.selectField": { "1": "ラベルA", "2": "ラベルB", "3": "ラベルC" } }
フィールド出力可能な参照方法
参照フィールドの参照方法によりフィールドの指定可否が変わります。
フィールド取得先 |
参照方法 |
指定可否 | |
---|---|---|---|
参照先DB |
参照先DBの参照先 |
||
参照先DB | 1レコード参照 | - | 〇 |
参照先DB | 複数レコード参照 | - | 〇 |
参照先DBの参照先 | 1レコード参照 | 1レコード参照 | 〇 |
参照先DBの参照先 | 1レコード参照 | 複数レコード参照 | × |
参照先DBの参照先 | 複数レコード参照 | 1レコード参照 | × |
参照先DBの参照先 | 複数レコード参照 | 複数レコード参照 | × |
指定可能なフィールドタイプ
フィールド取得先 | |||||||
---|---|---|---|---|---|---|---|
自DB | 参照先DB | 参照先DBの参照先 | |||||
フィールドタイプ | 指定可否 | 参照方法 | 指定可否 | 参照方法 | 指定可否 | 参照方法 | 指定可否 |
_id(システムフィールド) | × | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
_id以外のシステムフィールド | × | 1レコード | × | 複数 | × | 1レコード | × |
テキスト | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
テキストエリア | 〇 | 1レコード | 〇 | 複数 | × | 1レコード | 〇 |
メールアドレス | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
セレクト | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
マルチセレクト | 〇 | 1レコード | 〇 | 複数 | × | 1レコード | 〇 |
整数 | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
数値 | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
電話番号 | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
日時 | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
日付 | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
月日 | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
時刻 | 〇 | 1レコード | 〇 | 複数 | 〇 | 1レコード | 〇 |
ファイル | 〇 | 1レコード | × | 複数 | × | 1レコード | × |
パスワード | 〇 | 1レコード | × | 複数 | × | 1レコード | × |
参照フィールド (1レコード参照) |
〇 | 1レコード | 〇 | 複数 | × | 1レコード | × |
参照フィールド (複数レコード参照) |
〇 | 1レコード | × | 複数 | × | 1レコード | × |
ユーザフィールド |
〇 | 1レコード | 〇 | 複数 | × | 1レコード | 〇 |
参照先DBや参照先DBの参照先のフィールドの指定制限
・fieldsパラメータで指定可能なフィールド数は自DB、参照先DB、参照先DBの参照先フィールド含め合計150フィールドまでです。
・参照フィールド(複数レコード参照)の参照先フィールドは、1つの参照フィールドにつき5フィールドまで指定可能です。
・参照フィールドは合計で5フィールドまで指定可能です。
※参照先DBや参照先DBの参照先のフィールドを指定したことにより、同一参照フィールドを複数回指定した場合は1フィールドとしてカウントします。
ただし複数の自DBの参照フィールドから1つの参照先DBの参照フィールドを複数回指定している場合は、自DBの参照フィールド毎に別フィールドとしてカウントします。
参照フィールドカウント例1
下記のフィールドを指定した場合、参照フィールドの合計は5フィールドとなる
fields= セミナー申込DBの参照フィールド1, セミナー申込DBの参照フィールド1.セミナーマスタDBのテキスト1, セミナー申込DBの参照フィールド1.セミナーマスタDBの参照フィールド1, セミナー申込DBの参照フィールド1.セミナーマスタDBの参照フィールド1.講師DBのテキスト1, セミナー申込DBの参照フィールド1.セミナーマスタDBの参照フィールド2, セミナー申込DBの参照フィールド1.セミナーマスタDBの参照フィールド2.会場DBのテキスト1, セミナー申込DBの参照フィールド1.セミナーマスタDBの参照フィールド2.会場DBのテキスト2, セミナー申込DBの参照フィールド2, セミナー申込DBの参照フィールド2.会員DBのテキスト1, セミナー申込DBの参照フィールド2.会員DBのテキスト2, セミナー申込DBの参照フィールド3, セミナー申込DBの参照フィールド3.関連部署DBのテキスト1
内訳
1.セミナー申込DBの参照フィールド1 2.セミナー申込DBの参照フィールド2 3.セミナー申込DBの参照フィールド3 4.セミナーマスタDBの参照フィールド1 5.セミナーマスタDBの参照フィールド2
参照フィールドカウント例2
下記のフィールドを指定した場合、参照フィールドの合計は5フィールドとなる
fields= セミナー申込DBの参照フィールド1, セミナー申込DBの参照フィールド1.セミナーマスタDBのテキスト1, セミナー申込DBの参照フィールド1.セミナーマスタDBの参照フィールド1, セミナー申込DBの参照フィールド1.セミナーマスタDBの参照フィールド1.講師DBのテキスト1, セミナー申込DBの参照フィールド2, セミナー申込DBの参照フィールド2.セミナーマスタDBのテキスト1, セミナー申込DBの参照フィールド2.セミナーマスタDBの参照フィールド1, セミナー申込DBの参照フィールド2.セミナーマスタDBの参照フィールド1.講師DBのテキスト1, セミナー申込DBの参照フィールド3, セミナー申込DBの参照フィールド3.関連部署DBのテキスト1
内訳
1.セミナー申込DBの参照フィールド1 2.セミナー申込DBの参照フィールド2 3.セミナー申込DBの参照フィールド3 4.セミナーマスタDBの参照フィールド1(参照元の参照フィールドがセミナー申込DBの参照フィールド1) 5.セミナーマスタDBの参照フィールド1(参照元の参照フィールドがセミナー申込DBの参照フィールド2)
※講師DBのテキスト1を2回指定し、2回ともセミナーマスタDBの参照フィールド1を参照しているが、参照元の参照フィールドが異なるため別フィールドとしてカウントする
既存のレコード一覧取得API、レコード取得APIとの比較
レコード一覧を取得(既存) | 参照先フィールドを含めたレコード一覧を取得(追加) | |
---|---|---|
fieldsパラメータ ※1 ※2 ※3 |
〇 自DBのフィールドを指定可能 |
〇 |
fieldsパラメータで 自DBの「_id」指定 |
× ※指定不要。未指定でも「_id」、「_id」以外のシステムフィールドは標準で出力される |
× ※指定不要。未指定でも「_id」、「_id」以外のシステムフィールドは標準で出力される |
fieldsパラメータで 参照先DBの「_id」指定 |
- | 〇 ※3 |
自DB参照フィールドのResponse |
参照先レコードを取得するためのAPIのURLが出力される ※4 |
参照しているレコードIDを出力する ※5 |
レコードを取得(既存) | 参照先フィールドを含めたレコードを取得(追加) | |
---|---|---|
fieldsパラメータ ※1 ※2 ※3 |
× |
〇 |
fieldsパラメータで 自DBの「_id」指定 |
× ※指定不要。未指定でも「_id」、「_id」以外のシステムフィールドは標準で出力される |
× ※指定不要。未指定でも「_id」、「_id」以外のシステムフィールドは標準で出力される |
fieldsパラメータで 参照先DBの「_id」指定 |
- | 〇 ※3 |
自DB参照フィールドのResponse |
参照先レコードを取得するためのAPIのURLが出力される ※6 |
参照しているレコードIDを出力する ※5 |
※1 fieldsパラメータで指定したフィールドが出力されます。
fieldsを使用しない場合、自DBの出力可能なフィールドが全て出力されますが、参照先DBや参照先DBの参照先のフィールドは出力されません。
参照先DBや参照先DBの参照先のフィールドを使用する場合はfieldsパラメータでフィールドを指定してください。
※2 fieldsパラメータで指定するフィールドはリクエストするAPIエージェントに下記の閲覧権限が必要です。
・アプリロール>フィールド権限>閲覧権限
・(参照先DBや先の先のフィールドを指定する場合)参照元のアプリロール>参照フィールドのフィールド権限>閲覧権限
フィールド閲覧権限が無い場合、403エラーを返します。
※3 参照先フィールドを含めたレコード一覧取得API、参照先フィールドを含めたレコード取得APIで
参照先DBや参照先DBの参照先の「_id」やフィールド値を出力する場合、下記の閲覧権限が必要です。
・参照先DBや参照DBの参照先のアプリロール>レコード閲覧権限
レコード閲覧権限が無い場合、nullを返します。
参照元DBの参照フィールドは参照先のレコード閲覧権限が無い場合でも参照しているレコードIDを出力する為、
参照しているレコードIDと参照先DBや参照先DBの参照先の「_id」やフィールド値を比較することで、参照先DBのレコード閲覧権限の有無を確認することが出来ます。
例)自DBの複数レコード参照の参照フィールド、参照先DBの「_id」とフィールド値のレスポンスが下記だった場合、
ID1はレコード閲覧権限あり、ID2はレコード閲覧権限なし となります。
"multiReferenceField": ["1","2"], "multiReferenceField._id": ["1",null], "multiReferenceField.textField": ["text",null],
※4 レコード一覧を取得 自DB参照フィールドのResponse例
"singleReferenceField": { "url": "https://api.spiral-platform.com/v1/apps/XXX/dbs/123/records?referrer=123.4:56" }, "multiReferenceField": { "url": "https://api.spiral-platform.com/v1/apps/XXX/dbs/123/records?referrer=123.7:56" },
※5 参照先フィールドを含めたレコード一覧を取得、参照先フィールドを含めたレコードを取得 自DB参照フィールドのResponse例
"singleReferenceField": "1", "multiReferenceField": ["1","2"],
※6 レコードを取得 自DB参照フィールドのResponse例
"singleReferenceField": { "info": { "url": "https://api.spiral-platform.com/v1/apps/XXX/dbs/123/records?referrer=123.4:56" }, "value": { "_id": "1", "_unauthorized": false, "_revision": "10", "_createdBy": { ... }, "_createdAt": "2020-04-30T17:06:29Z", "_updatedBy": { ... }, "_updatedAt": "2020-04-30T17:06:29Z" } }, "multiReferenceField": { "info": { "url": "https://api.spiral-platform.com/v1/apps/XXX/dbs/123/records?referrer=123.7:56" }, "value": [ { "_id": "2", "_unauthorized": false, "_revision": "10", "_createdBy": { ... }, "_createdAt": "2020-04-30T17:06:29Z", "_updatedBy": { ... }, "_updatedAt": "2020-04-30T17:06:29Z" }, { "_id": "3", "_unauthorized": false, "_revision": "10", "_createdBy": { ... }, "_createdAt": "2020-04-30T17:06:29Z", "_updatedBy": { ... }, "_updatedAt": "2020-04-30T17:06:29Z" } ] },
その他制限事項
・本APIはver.1.1で利用できます。
・ソート対象(sortパラメータ)に指定可能なフィールドは自DBのフィールドのみです。
・抽出条件(whereパラメータ)に指定可能なフィールドは自DBのフィールドのみです。