jsonproxyでのpostデータについて

異なるKintoneドメインからPOSTにてデータ登録をしたく、以下のようなコードで登録を試みているのですが、エラーになってしまいます。

“code”:"CB_IJ01”

“message”:"不正なJSON文字列です。”

 

// リクエストプロパティ(JSON)
var params = {
“app”: “1”,
“record”: {
“test”: {
“value”: “test”
}
}
};

var header = {
‘X-Cybozu-API-Token’ : APP_TOKEN,
‘Content-Type’ : JSON.stringify(‘application/json’)
};

//xxxxxはPOST先のサブドメインにしております。

//POST対象のアプリにてAPIトークン発行し、権限も付与しています。

kintone.proxy(‘https://xxxxx.cybozu.com/k/v1/records.json’, ‘POST’, {header}, {params}, function(body, status, headers) {
//success
console.log(status, JSON.parse(body), headers);
}, function(error) {
//error
console.log(error); //proxy APIのレスポンスボディ(文字列)を表示
});

神崎 良平さん

パッと見ですが、そのソースコードだと以下の問題が見受けられます。

  1. header に設定している Content-type
  2. proxy に設定している header と params
  3. リクエストボディの誤り

それぞれ説明していきますね。

まず、header に設定している Content-type は、JSON.stringify で変換しなくても大丈夫ですよ。

また、今回発生しているエラーの要因となりますが、proxy の引数に設定している
header や params は、変数に設定している時点でオブジェクトとなっているため、
実行時に {} で囲う必要はないです。

最後にリクエストボディですが、URI が records となってるので、一括登録だと思っているのですが、合ってます?
その場合、そのリクエストボディだとエラーが発生するので、レコード一括登録のドキュメントを参考にリクエストボディを修正してみてください。
一括登録じゃないのであれば、URI は records.json ではなく、record.json になりますね。

以下は上記を元にした修正例です↓
※ 一括登録ではなく、1件のみの登録の修正例です。

// リクエストプロパティ(JSON)
var params = {
"app": "1",
"record": {
"test": {
"value": "test"
}
}
};

var header = {
'X-Cybozu-API-Token' : APP_TOKEN,
'Content-Type' : 'application/json'
};

//xxxxxはPOST先のサブドメインにしております。

//POST対象のアプリにてAPIトークン発行し、権限も付与しています。

kintone.proxy('[https://xxxxx.cybozu.com/k/v1/record.json](https://xxxxx.cybozu.com/k/v1/records.json)', 'POST', header, params, function(body, status, headers) {
//success
console.log(status, JSON.parse(body), headers);
}, function(error) {
//error
console.log(error); //proxy APIのレスポンスボディ(文字列)を表示
});

 

しぶい様

丁寧な説明ありがとうございました。

ご教示いただいた方法にて、無事にデータの登録ができました。

大変助かりました。ありがとうございます。