Help us understand the problem. What is going on with this article?

kintone REST API について (POST編)

【更新情報】
2019/03/17 複数件追加の処理を追記
2018/10/27 PHPの処理を追記
2018/10/22 記事公開


はじめに

前回の記事 の続きです。

▼ 連載記事一覧

タイトル
0 kintone環境の取得方法 (開発者ライセンス)
1 kintoneの使い方 (データベース編)
2 kintone REST API について (共通事項編)
3 kintone REST API について (GET編)
4 kintone REST API について (POST編) ← 本記事

今回はREST APIを使って、kintoneにデータを 登録 する方法について説明します!

レコード1件を登録

とりあえず、レコード1件 登録する方法について説明します。
文字列1行フィールド (フィールドコード:text) でやります。

共通項目

レコード1件を登録するための共通項目 (共通項目についてはこちら) は、

  • URI
    • https://(サブドメイン名).cybozu.com/k/v1/record.json
  • メソッド
    • POST
  • ヘッダー
    • APIトークン認証 (APIトークン発行時に「レコード追加」にチェックをしてください)
    • Content-Type: applicatioin/json
  • リクエストパラメータ
    • アプリID: 100
    • レコードID: 1 (POSTの場合は必要ありません)
    • レコード情報 ※初登場!(↓で説明します)

となります。

レコード情報

POST (PUT) の場合、どんなレコード情報 で登録(更新)するのか指定する必要があります!
今回であれば「textというフィールドにどんな文字列を入れたいか」です。

それを record オブジェクトで指定します。kintone独自の書き方になるのでぜひ覚えてください!!

//  一般的な書き方
let obj = {
  'record': {
    'フィールドコード': {
      'value': '(挿入したい値)'
    }
  }
};

// 今回の例だと
let obj = {
  'record': {
    'text': {
      'value': 'sample text'
    }
  }
};

こんな形で書きます。
ドロップダウンやチェックボックスなど選択肢系のやつは、
valueの値をフィールドの選択肢にある値にしないとエラーになるのでご注意ください!

実装

コマンドライン (curlコマンド)で実行

コマンドラインからレコードを1件登録する場合は、以下のコマンドとなります。

# Windows(PowerShell)の場合
curl.exe -X 'POST' "https://(サブドメイン名).cybozu.com/k/v1/record.json" `
-H 'X-Cybozu-API-Token: YOUR_TOKEN' `
-H 'Content-Type: application/json' `
-d '{"app":100,"record":{"text":{"value":"sample text"}}}'

# Mac(ターミナル)の場合
curl -X 'POST' 'https://(サブドメイン名).cybozu.com/k/v1/record.json' \
-H 'X-Cybozu-API-Token: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"app":100,"record":{"text":{"value":"sample text"}}}'

JavaScript (Node.js) で実行

Node.jsでレコードを1件登録する場合は、以下のコードとなります。
※ RESTAPIのリクエストに requestモジュールを利用しています。

const request = require('request');

let obj = {
  'app': 100,
  'record': {
    'text': {
      'value': 'sample text'
    }
  }
};

let params = {
  url: 'https://(サブドメイン名).cybozu.com/k/v1/record.json',
  method: 'POST',
  json: true,
  headers: {
    'X-Cybozu-API-Token': 'YOUR_TOKEN',
    'Content-Type': 'application/json',
  },
  body: obj,
};

request(params, function(err, resp, body) {
  if (err) {
    console.log(err);
    return;
  }
  console.log(body);
});

Python で実行

Pythonでレコードを1件登録する場合は、以下のコードとなります。
※ RESTAPIのリクエストに requestsモジュールを利用しています。

#!/usr/bin/python
# _*_ coding: utf-8 _*_

import requests

URL = "https://(サブドメイン名).cybozu.com/k/v1/record.json"
PARAMS = {
  "app": 100,
  "record": {
    "text": {
      "value": "sample text"
    }
  }
}
API_TOKEN = "YOUR TOKEN"

def post_kintone(url, api_token, params):
    """kintoneにレコードを1件登録する関数"""
    headers = {"X-Cybozu-API-Token": api_token, "Content-Type" : "application/json"}
    resp = requests.post(url, json=params, headers=headers)

    return resp

if __name__ == "__main__":
    RESP = post_kintone(URL, API_TOKEN, PARAMS)

    print(RESP.text)

Go で実行

Goでレコードを1件登録する場合は、以下のコードとなります。

package main

import (
  "fmt"
  "net/http"
  "io/ioutil"
  "bytes"
)

func main() {
  APPID := "100"
  url := "https://(サブドメイン名).cybozu.com/k/v1/record.json"
  jsonStr := `{"app":` + APPID + `, "record": {"text": {"value": "sample text"}}}`
  req, _ := http.NewRequest(
    "POST",
    url,
    bytes.NewBuffer([]byte(jsonStr)),
  )
  req.Header.Set("X-Cybozu-API-Token", "YOUR_TOKEN")
  req.Header.Set("Content-Type", "application/json")

  client := new(http.Client)
  resp, _ := client.Do(req)

  defer resp.Body.Close()

  response, _ := ioutil.ReadAll(resp.Body)
  fmt.Println(string(response))
}

PHPで実行

PHPでレコードを1件登録する場合は、以下のコードとなります。

<?php

$url = 'https://(サブドメイン名).cybozu.com/k/v1/record.json';
$headers = [
  'X-Cybozu-API-Token: YOUR TOKEN',
  'Content-Type: application/json'
];

$body = [
  'app' => 100,
  'record' => [
    'text' => [
      'value' => 'sample text'
    ]
  ]
];

// JSONに変換
$json = json_encode($body);

// 初期化
$curl = curl_init($url);

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);

$response = curl_exec($curl);
echo $response;

curl_close($curl);

レスポンス

レスポンスは非常にシンプルで

{"id":"2", "revision":"1"}

と返ってきます。
idは登録したレコードID (今回だとレコードID:2として登録している)、
revisionは更新履歴のようなものです。

レコード複数件を登録

レコードを複数件登録する方法について説明します。
文字列1行フィールド (フィールドコード:text) でやります。

共通項目

レコード複数件を登録するための共通項目 (共通項目についてはこちら) は、

  • URI
    • https://(サブドメイン名).cybozu.com/k/v1/records.json
  • メソッド
    • POST
  • ヘッダー
    • APIトークン認証 (APIトークン発行時に「レコード追加」にチェックをしてください)
    • Content-Type: applicatioin/json
  • リクエストパラメータ
    • アプリID: 100
    • レコード情報

となります。

レコード情報

登録したいレコードが複数件ある場合は recordss として配列で指定します。
詳しい書き方は こちら をご覧ください。

let obj = {
  'records': [{
    'text': {
      'value': 'sample text1'
    }
  },
  {
    'text': {
      'value': 'sample text2'
    }
  },
  {
    'text': {
      'value': 'sample text3'
    }
  }]
};

それぞれバラバラにレコード情報を記述できるので、
2つ目だけさらに別フィールドも、とかも可能です。

let obj = {
  'records': [{
    'text': {
      'value': 'sample text1'
    }
  },
  {
    'text': {
      'value': 'sample text2'
    },
    'text2': {
      'value': 'sample text2-1'
    }
  },
  {
    'text': {
      'value': 'sample text3'
    }
  }]
};

実装

コマンドライン (curlコマンド)で実行

コマンドラインからレコードを複数件登録する場合は、以下のコマンドとなります。

# Windows(PowerShell)の場合
curl.exe -X 'POST' "https://(サブドメイン名).cybozu.com/k/v1/records.json" `
-H 'X-Cybozu-API-Token: YOUR_TOKEN' `
-H 'Content-Type: application/json' `
-d '{"app":100,"records":[{"text":{"value":"sample text"}},{"text":{"value":"sample text2"}}]}'

# Mac(ターミナル)の場合
curl -X 'POST' 'https://(サブドメイン名).cybozu.com/k/v1/records.json' \
-H {'X-Cybozu-API-Token: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"app":100,"records":[{"text":{"value":"sample text"}},{"text":{"value":"sample text2"}}]}'

JavaScript (Node.js) で実行

Node.jsでレコードを複数件登録する場合は、以下のコードとなります。
※ RESTAPIのリクエストに requestモジュールを利用しています。

const request = require('request');

let obj = {
  'app': 100,
  'records': [{
    'text': {
      'value': 'sample text1'
    }
  },
  {
    'text': {
      'value': 'sample text2'
    }
  }]
};

let params = {
  url: 'https://(サブドメイン名).cybozu.com/k/v1/records.json',
  method: 'POST',
  json: true,
  headers: {
    'X-Cybozu-API-Token': 'YOUR_TOKEN',
    'Content-Type': 'application/json',
  },
  body: obj,
};

request(params, function(err, resp, body) {
  if (err) {
    console.log(err);
    return;
  }
  console.log(body);
});

Python で実行

Pythonでレコードを複数件登録する場合は、以下のコードとなります。
※ RESTAPIのリクエストに requestsモジュールを利用しています。

#!/usr/bin/python
# _*_ coding: utf-8 _*_

import requests

URL = "https://(サブドメイン名).cybozu.com/k/v1/records.json"
PARAMS = {
  "app": 100,
  "records": [{
    "text": {
      "value": "sample text1"
    }
  },
  {
    "text": {
      "value": "sample text2"
    }
  }]
}
API_TOKEN = "YOUR TOKEN"

def post_kintone(url, api_token, params):
    """kintoneにレコードを複数件登録する関数"""
    headers = {"X-Cybozu-API-Token": api_token, "Content-Type" : "application/json"}
    resp = requests.post(url, json=params, headers=headers)

    return resp

if __name__ == "__main__":
    RESP = post_kintone(URL, API_TOKEN, PARAMS)

    print(RESP.text)

Go で実行

Goでレコードを複数件登録する場合は、以下のコードとなります。

package main

import (
  "fmt"
  "net/http"
  "io/ioutil"
  "bytes"
)

func main() {
  APPID := "100"
  url := "https://(サブドメイン名).cybozu.com/k/v1/records.json"
  jsonStr := `{"app":` + APPID + `, "records": [{"text": {"value": "sample text"}}, {"text": {"value": "sample text2"}}]}`
  req, _ := http.NewRequest(
    "POST",
    url,
    bytes.NewBuffer([]byte(jsonStr)),
  )
  req.Header.Set("X-Cybozu-API-Token", "YOUR_TOKEN")
  req.Header.Set("Content-Type", "application/json")

  client := new(http.Client)
  resp, _ := client.Do(req)

  defer resp.Body.Close()

  response, _ := ioutil.ReadAll(resp.Body)
  fmt.Println(string(response))
}

PHPで実行

PHPでレコードを複数件登録する場合は、以下のコードとなります。

<?php

$url = 'https://(サブドメイン名).cybozu.com/k/v1/records.json';
$headers = [
  'X-Cybozu-API-Token: YOUR TOKEN',
  'Content-Type: application/json'
];

$body = [
  'app' => 100,
  'records' => [
    'text' => [
      'value' => 'sample text'
    ],
    'text' => [
      'value' => 'sample text2'
    ]
  ]
];

// JSONに変換
$json = json_encode($body);

// 初期化
$curl = curl_init($url);

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);

$response = curl_exec($curl);
echo $response;

curl_close($curl);

レスポンス

レスポンスは非常にシンプルで

{"ids":["1", "2"], "revisions":["1", "1"]}

とそれぞれ配列で返ってきます。

おわりに

kintone REST API のPOST処理を4種類の方法で試してみました。
前回の 共通事項編GET編と合わせて読むとより良いかもです!

とりあえず、4部構成が全て終わりました!

連載記事一覧

タイトル
0 kintone環境の取得方法 (開発者ライセンス)
1 kintoneの使い方 (データベース編)
2 kintone REST API について (共通事項編)
3 kintone REST API について (GET編)
4 kintone REST API について (POST編) ← 本記事

それでは!≧(+・` ཀ・´)≦

RyBB
サイボウズ テクニカルエバンジェリスト / kintone認定 カスタマイズスペシャリスト、アプリデザインスペシャリスト
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした