参照先フィールドを含めたレコード取得API
機能概要
従来のレコード取得APIにおいては、参照先情報も含めて取得する場合は、
参照元DBのレコードを一度取得し、別途、参照先情報をリクエストする必要がありましたが、
新たに追加された参照先フィールドを含めたレコード取得APIを活用することで、
参照元DBのフィールドに加え、参照先DBのフィールドや参照先DBのさらに参照先のフィールド値を1リクエストでまとめて取得できるようになります。
APIの記述方法についてはサンプルプログラムやAPIリファレンスをご覧ください。
例えば、以下のようなことが実現できます。
 ・セミナーマスタとセミナー申込DBがある場合に、セミナー情報も含んだ申込履歴情報を1リクエストで取得する。
 ・セミナーマスタとセミナー講師マスタ、セミナー申込DBがある場合に、セミナー情報と講師情報を含んだ申込履歴情報を1リクエストで取得する。
仕様
APIの種類
| 説明 | メソッド | エンドポイント | 
|---|---|---|
| 参照先フィールドを含めたレコード一覧を取得 | GET | /apps/{appId}/dbs/{dbId}/records/join | 
| 参照先フィールドを含めたレコードを取得 | GET | /apps/{appId}/dbs/{dbId}/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のフィールドのみです。
