レコードの取得(GET)

フォローする

Index

レコードの取得(1件)

レコードの閲覧権限のあるユーザーが、レコードIDを指定してレコードの内容を取得できます。

HTTP メソッド

GET

URI

https://(サブドメイン名).cybozu.com/k/v1/record.json

ゲストスペース内のアプリの場合

https://(サブドメイン名).cybozu.com/k/guest/(スペースのID)/v1/record.json 

リクエストパラメータ

パラメータ名 指定する値 必須 説明
app 数値又は文字列 必須 アプリのIDを指定します。
id 数値又は文字列 必須 レコードIDを指定します。

リクエストの例

(1) パラメータを HTTP のクエリ文字列で送信する場合

「app」「id」のパラメータを「&」で連結し、HTTPのクエリ文字列として送信します。

クエリ文字列
app=8&id=100
リクエストヘッダを含んだ文字列
GET /k/v1/record.json?app=8&id=100 HTTP/1.1
Host: example.cybozu.com:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
  • Content-Typeヘッダは不要です。

(2) パラメータを JSON形式で送信する場合(HTTP リクエストのリクエストボディに JSON データをセットする場合)

リクエストのヘッダとボディの例

リクエストヘッダ
GET /k/v1/record.json HTTP/1.1
Host: example.cybozu.com:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
Content-Type: application/json
  • Content-Type に application/json を指定して下さい。 指定しない場合は JSON が解釈できないため、実行時エラーとなります。
ボディ

レスポンスの例

処理が成功すると、レコードの内容がJSON形式で返されます。 ※各フィールドの形式については フィールド形式をご確認ください。

JavaScriptサンプル

kintone REST API

XMLHttpRequest

レコードの一括取得(クエリで条件を指定)

レコードの閲覧権限のあるユーザーが、レコードをクエリで条件を指定して取得できます。

  • 一度に取得できるレコードは 500件までです。
  • リクエスト時にクエリで指定できる fields の添字は、0~99の範囲になります。
  • リクエスト時にボディで指定できる fields数は 1000個までです。
  • クエリで文字列検索する場合は単語検索となります。詳しくは「検索キーワードに関する注意」を参照ください。

HTTP メソッド

GET

URI

https://(サブドメイン名).cybozu.com/k/v1/records.json

ゲストスペース内のアプリの場合

https://(サブドメイン名).cybozu.com/k/guest/(スペースのID)/v1/records.json 

リクエストパラメータ

パラメータ名 指定する値 必須 説明
fields 文字列の配列 省略可 レスポンスに含めるフィールドコードを指定します。 省略した場合は、閲覧権限を持つすべてのフィールドの値が返されます。
app 数値又は文字列 必須 アプリのID を指定します。
query 文字列 省略可 レスポンスに含めるレコードの条件を指定するクエリ文字列です。 クエリ文字列内では、後述の演算子とオプションが使用できます。 省略した場合は、閲覧権限を持つすべてのレコードが返されます。
totalCount 真偽値又は文字列 省略可

「query」パラメータで指定した条件にあてはまるレコードの件数を取得する場合、「true」を指定します。
指定を省略した場合、レスポンスにはtotalCountの値としてnullが返されます。

「query」パラメータで利用可能な演算子と関数

演算子

演算子 意味
= 文字列_0 = "テスト" 演算子の前に指定したフィールドコードの値と演算子の後に指定した値が一致するレコードが抽出されます。
!= 文字列_0 != "テスト" 演算子の前に指定したフィールドコードの値と演算子の後に指定した値が異なるレコードが抽出されます。
> 数値_0 > 10 演算子の前に指定したフィールドコードの値が、演算子の後に指定した値より大きいレコードが抽出されます。
< 数値_0 < 10 演算子の前に指定したフィールドコードの値が、演算子の後に指定した値より小さいレコードが抽出されます。
>= 数値_0 >= 10 演算子の前に指定したフィールドコードの値が、演算子の後に指定した値以上のレコードが抽出されます。
<= 数値_0 <= 10 演算子の前に指定したフィールドコードの値が、演算子の後に指定された値以下のレコードが抽出されます。
in ドロップダウン_0 in ("A", "B") 演算子の前に指定したフィールドコードの値が、演算子の後の括弧内に列挙した文字列のいずれかと一致するレコードが抽出されます。 ドロップダウンやラジオボタンなどの選択式のフィールドで指定した選択肢が選択されたレコードを抽出する場合に使います。 左の例では、ドロップダウンリストで「A」か「B」が選択されているレコードが抽出されます。
not in ドロップダウン_0 not in ("A", "B") 演算子の前に指定したフィールドコードの値が、演算子の後の括弧内に列挙した文字列と一致しないレコードが抽出されます。 ドロップダウンやラジオボタンなどの選択式のフィールドで指定した選択肢が選択されていないレコードを抽出する場合に使います。 左の例では、ドロップダウンリストで「A」か「B」以外が選択されているレコードが抽出されます。
like 文字列_0 like "テスト" 演算子の前に指定したフィールドコードの値が、演算子の後に指定した値を含むレコードが抽出されます。判定するフィールドの型が添付ファイルの場合、ファイル名とファイルの内容が判定の対象になります。
not like 文字列_0 not like "テスト" 演算子の前に指定したフィールドコードの値が、演算子の後に指定した値を含まないレコードが抽出されます。
or 数値_0 < 10 or 数値_0 > 20 上述の演算子を使用した2つの条件式の論理和を求めます。 左の例では、フィールドコード「数値_0」が10より小さい、または20より大きいレコードが抽出されます。
and 数値_0 >= 10 and 数値_0 <= 20 上述の演算子を使用した2つの条件式の論理積を求めます。 左の例では、フィールドコード「数値_0」が10以上、かつ20以下のレコードが抽出されます。
  • フィールドコードは、演算子の前に記述します。演算子の後には記述できません。
  • 式を「( )」でグループ化できます。 例 (数値_0 >= 10 and 数値_0 <= 20) or (数値_1 >= 100 and 数値_1 <= 200)
  • クエリで文字列検索する場合は単語検索となります。詳しくは「検索キーワードに関する注意」を参照ください。

関数

関数名 内容
LOGINUSER() 作成者 in (LOGINUSER()) APIを実行したユーザーに変換されます。
PRIMARY_ORGANIZATION() 組織 in (PRIMARY_ORGANIZATION()) APIを実行したユーザーの優先する組織。
NOW() 作成日時 = NOW() APIを実行した日時に変換されます。
TODAY() 作成日時 = TODAY() APIを実行した日に変換されます。
FROM_TODAY(数字, 期間の単位) 作成日時 < FROM_TODAY(5, DAYS)

期間の単位に指定可能な文字列です。

  • DAYS:日単位
  • WEEKS:週単位
  • MONTHS:月単位
  • YEARS:年単位
THIS_WEEK() 作成日時を日曜日にする場合
  • 作成日時 = THIS_WEEK(SUNDAY)

曜日に指定可能な文字列です。
※指定しない場合には、日曜日になります。

  • SUNDAY:日曜日
  • MONDAY:月曜日
  • TUESDAY:火曜日
  • WEDNESDAY:水曜日
  • THURSDAY:木曜日
  • FRIDAY:金曜日
  • SATURDAY:土曜日
LAST_WEEK() 作成日時 = LAST_WEEK() 曜日に指定可能な文字列は、THIS_WEEK()参照。
THIS_MONTH([数値|フォーマット文字]) 今月のすべて
  • 作成日時 = THIS_MONTH()
今月末
  • 作成日時 = THIS_MONTH(LAST)
今月の20日
  • 作成日時 = THIS_MONTH(20)
APIを実行した月に変換されます。
引数に次の値を指定することができます。
  • LAST:今月末
  • 1-31の数値:指定した今月の日付
    ※月に指定した日がない場合は、「翌月1日」で計算されます。
LAST_MONTH([数値|フォーマット文字]) 前月のすべて
  • 作成日時 = LAST_MONTH()
前月末
  • 作成日時 = LAST_MONTH(LAST)
前月の20日
  • 作成日時 = LAST_MONTH(20)
APIを実行した前月に変換されます。
引数に次の値を指定することができます。
  • LAST:前月末
  • 1-31の数値:指定した前月の日付
    ※月に指定した日がない場合は、「翌月1日」で計算されます。
THIS_YEAR() 作成日時 = THIS_YEAR() APIを実行した年に変換されます。

フィールド、システム識別子ごとの利用可能な演算子と関数一覧

フィールド又はシステム識別子 利用可能な演算子 利用可能な関数
レコード番号 = != > < >= <= in not in  
$id = != > < >= <= in not in  
作成者
(※1)
in not in LOGINUSER()
作成日時 = != > < >= <= NOW()
TODAY()
FROM_TODAY()
THIS_WEEK()
LAST_WEEK() 
THIS_MONTH()
LAST_MONTH()
THIS_YEAR()
更新者
(※1)
in not in LOGINUSER()
更新日時 = != > < >= <= NOW()
TODAY()
FROM_TODAY()
THIS_WEEK()
LAST_WEEK() 
THIS_MONTH()
LAST_MONTH()
THIS_YEAR()
文字列(1行)、リンク = != in not in like not like --
数値 = != > < >= <= in not in --
文字列(複数行) like not like --
リッチエディター like not like --
チェックボックス in not in --
ラジオボタン in not in --
ドロップダウン in not in --
複数選択 in not in --
添付ファイル like not like --
日付 = != > < >= <=

TODAY()
FROM_TODAY()
THIS_WEEK()
LAST_WEEK() 
THIS_MONTH()
LAST_MONTH()
THIS_YEAR()

時刻 = != > < >= <= --
日時 = != > < >= <= NOW()
TODAY()
FROM_TODAY()
THIS_WEEK()
LAST_WEEK() 
THIS_MONTH()
LAST_MONTH()
THIS_YEAR()
ユーザー選択
(※1)
in not in LOGINUSER()
組織選択 in not in

PRIMARY_ORGANIZATION()

グループ選択 in not in --
ステータス = != in not in --

ルックアップ

ルックアップ元のフィールドタイプと同一 ルックアップ元のフィールドタイプと同一
関連レコード 参照するアプリのフィールドタイプと同一 参照するアプリのフィールドタイプと同一
  • ※1:ログイン名、グループコード 又は組織コードを指定する。
    ログイン名が◯◯と△△のユーザー、グループコードが××のグループ、組織コードが□□の組織がユーザ選択フィールドに含まれているレコードのリクエストは次の用に表記できます: user_field in (" USER", "◯◯", "△△", " GROUP", "××", " ORGANIZATION", "□□")

テーブル化されたフィールド、関連レコードのフィールドをクエリに含める場合の注意事項

テーブル化されたフィールドおよび、関連レコードのフィールドをクエリに含める場合、「=」、「!=」演算子の代わりに「in」、「not in」演算子を使う必要があります。

関連レコードに含まれるフィールドを指定する方法

関連レコードに含まれるフィールドを条件に含める場合、次のような形式でフィールドを指定します。

関連レコードのフィールドコード.関連レコード先のフィールドコード

関連レコードのフィールドコードを指定する例

  • 関連レコードのフィールドコードが「企業マスタ」
  • 企業マスタに含まれる「企業名」フィールドが「サイボウズ」
  • 企業マスタに含まれる「所在地」フィールドが「東京都」を含む
「query」パラメータの例
企業マスタ.企業名 in ("サイボウズ") and 企業マスタ.所在地 like "東京都"

レコード番号フィールドの指定

絞り込み条件とorder byでレコード番号のフィールドコードを指定する代わりに$idでレコード番号フィールドを指定することができます。
関連レコード一覧内のレコード番号フィールドを指定する場合、「関連レコード一覧のフィールドコード.$id」で指定できます。

「query」パラメータで使用できるオプション

オプション 説明
order by order by 更新日時 asc レコードの出力される順番が、本オプションに続けて指定したフィールドコードの値でソートされます。 フィールドコードの後に「asc」を指定すると昇順、「desc」を指定すると降順でソートされます。
limit limit 20 本オプションの後に指定した数だけ、レコードが出力されます。 左の例では、レコード先頭から20レコードだけ出力されます。 省略時の初期値は100、上限値は500です。
offset offset 30 本オプションの後に指定した数だけ、出力するレコードをスキップして、レコードが抽出されます。 左の例では、レコード先頭から30レコードは出力されず、31番目のレコードから出力されます。 上限値はありません。

上記演算子、オプションは組み合わせて使用できます。

リクエストの例

パラメータを HTTP のクエリ文字列で送信する場合

「app」「query」「fields」の3つのパラメータを「&」で連結したものをHTTPのクエリ文字列として送信します。ただし、「query」パラメータはURLエンコードする必要があります。

レコード取得条件の例
  • アプリIDが「8」
  • 「query」パラメータの値が「更新日時 > "2012-02-03T09:00:00+0900" and 更新日時 < "2012-02-03T10:00:00+0900" order by レコード番号 asc limit 10 offset 20」
  • 出力するフィールドが「レコード番号」「作成日時」「ドロップダウン」
  • 指定した条件にあてはまるレコードの件数を取得する
HTTPのクエリ文字列の例
app=1&query=updated_time%20%3E%20%222012-02-03T09%3A00%3A00%2B0900%22%20and%20updated_time%20%3C%20%222012-02-03T10%3A00%3A00%2B0900%22%20order%20by%20%24id%20asc%20limit%2010%20offset%2020&fields[0]=%24id&fields[1]=created_time&fields[2]=dropdown
リクエストヘッダの例
GET /k/v1/records.json?app=1&query=updated_time%20%3E%20%222012-02-03T09%3A00%3A00%2B0900%22%20and%20updated_time%20%3C%20%222012-02-03T10%3A00%3A00%2B0900%22%20order%20by%20%24id%20asc%20limit%2010%20offset%2020&fields[0]=%24id&fields[1]=created_time&fields[2]=dropdown HTTP/1.1
Host: example.cybozu.com:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
  • Content-Typeヘッダは不要です。

パラメータを JSON形式で送信する場合(HTTP リクエストのリクエストボディに JSON データをセットする場合)

リクエストのヘッダとボディの例

リクエストヘッダ
GET /k/v1/records.json HTTP/1.1
Host: example.cybozu.com:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
Content-Type: application/json
Content-Length: 234
ボディ
    • Content-Type に application/json を指定して下さい。 指定しない場合は JSON が解釈できないため、実行時エラーとなります。
    • 文字列の値は、「\(バックスラッシュ)」でエスケープした「"(ダブルクォーテーション)」で囲みます。

レスポンスの例

指定したフィールドのみが含まれるレコードのリストが JSON 配列で返されます。 ※各フィールドの形式については フィールド形式をご確認ください。

JavaScriptサンプル

kintone REST API

XMLHttpRequest

制限事項

制限事項 をご確認ください。

関連Tips

コメント

Avatar
植村 知之

2016-01-07現在ではレコード番号フィールドに対してin演算子を指定しても正しく動作しているようですが、
これはサポート対象外の操作になるのでしょうか?

Avatar
cybozu Development team

植村知之さん

cybozu.com developer network事務局です。

レコード番号フィールドに対してin演算子を指定していただけます。
本文に追記しましたのでご確認ください。
ご指摘いただきありがとうございました。

Avatar
三分一雅博

案件番号カラムがあって、"AA00","AA01","BB00","BB01"のようなレコードがあるときに、先頭に"AA"を含むレコードだけ取得したくて、「案件番号 like "AA"」のようなクエリを発行しているのですが1件もヒットしません。
「案件番号 like "AA01"」のようにすれば、"AA01"の1件だけ取得できます。
部分一致するレコードをすべて取得するには、どのようにすれば良いのでしょうか?私の書き方が間違っていますでしょうか?
案件番号に使用している要素は「文字列(1行)」になります。

Avatar
pukosan

kintoneのヘルプを確認したところ、画面の絞り込みに英数字を使い場合には検索は単語単位のようです。

(抜粋)
例:
値が「cybozu kintone2」のフィールドを検索するには、「cybozu」または「kintone2」を検索キーワードに指定します。
「cy」や「kintone」など部分一致する検索キーワードでは検索できません。
https://help.cybozu.com/ja/k/user/search_details.html

Avatar
三分一雅博

pukosanさん、返信ありがとうございます。そんな制約があったんですね。。。
案件番号を2単語に分けるわけにもいかないので、他の方法での取得を考えてみます。
すばやい回答で大変助かりました。ありがとうございました。

Avatar
塚本孝幸

作成日時 < FROM_TODAY(5, "DAYS")→この例は間違いでは?
作成日時 < FROM_TODAY(5, DAYS)→これで動いたけど

Avatar
cybozu Development team

塚本さん、恐れいります。
ご指摘をありがとうございます。ドキュメントを修正しました。

Avatar
tk

HTTP リクエストのリクエストボディに JSON データをセットする場合について確認です。
https://(サブドメイン名).cybozu.com/k/v1/record.json
にBODY
{
"app": 8,
"id": 100
}
を指定して実施すると、なぜかレコードが新規作成されます。

https://(サブドメイン名).cybozu.com/k/v1/records.json
にBODY
{
"app": 8
}
を指定して実施すると、
{"code":"CB_VA01","id":"1505999166-465222505","message":"入力内容が正しくありません。","errors":{"records":{"messages":["必須です。"]}}}
となります。

他、いろいろ試しましたが、取得することが出来ません。
{
"app": 8
"query": "数値 = 0",
"fields": ["$id"],
"totalCount": "true"
}

パラメータを HTTP のクエリ文字列で送信する方法では取得できます。
何がおかしいのかご教授お願いします。

Avatar
Qiuxiang Su

tk さん

HTTP リクエストのリクエストボディに JSON データをセットする場合、メソッドは何を指定したのでしょうか?

取得の場合、GETを指定する必要があります。

Avatar
tk

もちろん、GETを指定しています。

Avatar
Qiuxiang Su

tk さん

このページに記載してあるJavaScriptサンプルで確認したところ、

BODYにアプリIDとレコードIDを指定した場合と、アプリIDだけを指定した場合、正常にデータを取得できました。

ソースコードを見ないとなとも言えない為、差し支えなければソースを見せていただけますでしょうか。

 

Avatar
Toshi Akazawa

queryとして「品番 like "2016"」 のようにして一括取得しても一件もヒットしません。このページで他の方が同じ症状で質問されているを見つけ、その回答を拝見してようやく理由がわかりました。このページの本文には、使える演算子として like が一覧表に記載されていますが、注意事項が何も書いてありません。多大な時間を浪費してしまいましたので、他の方のためにもわかりやすく記載してもらえないでしょうか。他の演算子等も含め、全体的に注意事項の記載をよろしくお願いいたします。

Toshi Akazawaにより編集されました
Avatar
tk

ソースコードです。

ドメインと認証情報はxxxxxとしています。

よろしくお願い致します。


public static void main(String[] args) {

try {
URL url = new URL("https://xxxxx.cybozu.com/k/v1/record.json");
HttpURLConnection connection = null;
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("X-Cybozu-Authorization", "xxxxx");
connection.setRequestProperty("Content-Type", "application/json");

String body = "{\"app\":350, \"id\":36}";
connection.setRequestProperty("Content-Length", String.valueOf(body.length()));
connection.setDoOutput(true);
try (DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(dos, StandardCharsets.UTF_8);
BufferedWriter out = new BufferedWriter(osw);) {
out.write(body);
out.flush();
out.close();
}

StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(
new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
}
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
}

Avatar
カキ氷

tkさん

1.このコードを削除して試してもらえるでしょうか。

connection.setRequestProperty("Content-Type", "application/json");

2.アプリID、レコードIDの設定をJSONではなく、URLに記載してください。

https://xxxxx.cybozu.com/k/v1/record.json?app=350&id=36

 

あと、一からの実装より、kintone用のJavaSDKを利用するほうが手軽なのでオススメです。

https://cybozudev.zendesk.com/hc/ja/articles/202341774

 

・参考 SDKのHttp Request処理

>public String request(String method, String api, String body, File outFile)

https://github.com/kintone/java-sdk/blob/master/kintone-sdk/src/main/java/com/cybozu/kintone/database/Connection.java

 

カキ氷により編集されました
Avatar
tk

connection.setRequestProperty("Content-Type", "application/json");
を削除すると、Error 415 Unsupported Media Typeのエラーになります。
アプリID、レコードIDをURLに記載し、
String body = "{\"fields\": [\"$id\"]}";
とした場合、入力内容が正しくありません。のエラーになります。
全情報をURLに記載しBODYを設定しなければ取得できますが、
URLの文字数が長くなりすぎる場合を考慮してBODYを使用しようとしていました。

JavaSDKは動作保証されていないため、使用できない状況です。

Avatar
milkyway0307

パラメータを HTTP のクエリ文字列で送信する場合>HTTPのクエリ文字列の例

について,

&fields[0]=$id&fields[1]=created_time&fields[2]=dropdown

の部分もURLエンコードされているようですが,これは正しいですか?

私が実験する限りは,fields部分はエンコードしたらエラーが出て,エンコードしないままにしたら動作するのですが。

Avatar
植村 知之

tkさんの問題の根っこには、
そもそもHTTPのGETメソッドにRequestBodyを含めてもよいのか、という問題があります。
http://stackoverflow.com/questions/978061/http-get-with-request-body 

RFC的には、クライアントがそういうリクエストを送ることは違反ではないが、
サーバー側はRequestBodyの中を読んでその内容に対応したレスポンスを返すべきではない、
というルールのようです。
取得するレスポンスの内容に影響を与えることもできず、
GETだからサーバー側の状態を変更する用途にも使えない
ということであれば実質指定する意味がないので、
このような動作を行えないようにしているHTTPクライアントライブラリも多いようです。
例えば、.NETのHttpClientでは実行時に例外が発生しますし、
AndroidのHttpURLConnectionでは強制的にPOSTリクエストに変更されるようです。
https://developer.android.com/reference/java/net/HttpURLConnection.html 

> HttpURLConnection uses the GET method by default. It will use POST if setDoOutput(true) has been called.

もしURLの長さが問題になりそうなら、
kintoneでは X-HTTP-Method-Override ヘッダを使って
POSTリクエスト経由でGETリクエスト用のAPIを呼び出すのがいいと思います。
https://cybozudev.zendesk.com/hc/ja/articles/201941754-REST-API%E3%81%AE%E5%85%B1%E9%80%9A%E4%BB%95%E6%A7%98#step9 

Avatar
cybozu Development team

 

milkyway0307様

ご指摘いただきありがとうございます。

HTTPのクエリ文字列の例について修正をいたしました。

今後ともcybozu developer Networkをよろしくお願い致します。

Avatar
cybozu Development team

Toshi Akazawa様

ご指摘いただきありがとうございます。

クエリの文字列検索について「検索キーワードに関する注意」を追記致しました。

今後ともcybozu developer Networkをよろしくお願い致します。

Avatar
monaa
monaaにより編集されました
ログインしてコメントを残してください。
Powered by Zendesk