cybozu developer network

カテゴリー内の他の記事

レコードに値がなかったら登録、あったら更新するUPSERT

(著者:サイボウズ 後迫 孝) 

基幹システムの商品、顧客マスターを kintoneで作った「受発注」や「顧客案件管理」アプリに定期的に、更新したいケースはありませんか? 例えば、顧客マスターの場合にすでに登録済の顧客情報は更新して、新しいの顧客情報は登録したくなります。

kintone REST API では、レコード登録API、レコード更新APIがあるので、それらを組み合わせることで実現できます。kintone の レコードのキーになる値がない場合には登録して、値がある場合には更新するといったように組み合わせた方法をご紹介します。

データベースでいうと

SELECT -> UPDATE or INSERT

です。

組み合わせるAPI

  • レコード更新API
  • レコード登録API
  • レコード取得API

データを作る

まず、次のように kintone アプリにレコードを用意しましょう。

フィールドコード 企業コード 企業名 従業員数
C1001 ▲▲▲商事 1000

キー項目の値と一致するか調べる

HTTP のクエリ文字列でリクエストしてみます。

GET /k/v1/records.json?app=77&query=code="C1001"&fields=code  HTTP/1.1
Host: {sub-domain}.cybozu.com:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
  • リクエストするクエリ文字列(&query=以降)はURLエンコードしてください。
  • X-Cybozu-Authorization のパラメータ値は、ログイン名+「:」+パスワード をBASE64でエンコードしたものになります。

レスポンスには次の文字列が返ってきました。(一部を表示しています)

値があったら更新してみる

値があると id を取得できます。

PUT /k/v1/records.json? HTTP/1.1
Host: {sub-domain}.cybozu.com:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Content-Type: application/json
  • X-Cybozu-Authorization のパラメータ値は、ログイン名+「:」+パスワード をBASE64でエンコードしたものになります。
  • リクエストボディには、JSON形式の文字列になるので、Content-Type を指定します。

リクエストボディの内容です。

値がなかったら登録してみる

企業コード に 「1002」 を指定してレコード取得してみましょう。

https://{sub-domain}.cybozu.com/k/v1/records.json?app=77&query=code="C1002"&fields=code

その結果、レスポンスには次のような文字列が返ってきました。
これは、値がなかったことを意味します。

{}

値がないことがわかりましたので、レコードを登録してみます。 

POST /k/v1/records.json? HTTP/1.1
Host: {sub-domain}.cybozu.com:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Content-Type: application/json
  • X-Cybozu-Authorization のパラメータ値は、ログイン名+「:」+パスワード をBASE64でエンコードしたものになります。
  • リクエストボディには、JSON形式の文字列になるので、Content-Type を指定します。

リクエストボディの内容です。

POST に成功しますと、

  • "revision" はレコード単位で保有しているリビジョン番号になります。

 

このように、レコード取得、レコード更新・登録APIを利用して、 UPDATE or INSERT を実現できます。

ぜひお試しください。

 

このTipsは、2014年4月版で確認したものになります。

 

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

サインインしてコメントを残してください。