kintone.proxy()のエラー処理

外部サービスのAPIをコールできるkintone.proxy()には、外部APIへのアクセスエラーと、kintone.proxy()そのもののエラーがあります。この時エラーに関しては、これらを特段区別せずにまとめて処理したかったりします。

2つのエラーをまとめて処理するラッピング

世のAPIのリクエスト成功時のステータスコードはたいてい200ですので、結果ステータスコード200の時にはkintone.proxy()のリクエスト全体として成功(callback、resolve)、それ以外は(errback、reject)とするように考えると、次のようにラッピング出来そうです。

// kintone.proxy()のラッピングメソッド
function kintoneProxy(url, method, headers, data, callback, errback) {
  if (callback === undefined && errback === undefined) { // (1)kintone.Promiseオブジェクトを返す
    return new kintone.Promise(function(resolve, reject) {
      kintone.proxy(url, method, headers, data, function(body, status, headers) {
        if (status !== 200) {
          reject(body);
        } else {
          resolve(body);
        }
      }, function(err) {
        reject(err);
      });
    });
  } else if (callback !== undefined && errback === undefined) { // (2)callbackを利用(errback省略):非推奨
    kintone.proxy(url, method, headers, data, function(body, status, headers) {
      callback(body);
      if (status !== 200) {
        console.log('recommended you define errorback function.');
        console.log(body);
      }
    });
  } else { // (3)callbackを利用(errbackも定義)
    kintone.proxy(url, method, headers, data, function(body, status, headers) {
      if (status !== 200) {
        errback(body);
      } else {
        callback(body);
      }
    }, function(err) {
      errback(err);
    });
  }
}

(1)ではkintone.Promiseオブジェクトを返すスタイル、(2)、(3)ではcallbackを利用するスタイルを定義しましたが、errbackを省略できる(2)の形は利用せずにしっかりエラーを拾うようにした方が良いように思います。

ラッピングメソッドの利用方法

これを用いると、実行時次のような書き方になります。

// (1)kintone.Promiseオブジェクトを返す
kintoneProxy('http://***.net', method, headers, params).then(function(resp){
  console.log(JSON.parse(resp));
}).catch(function(err){
  console.log(err);
});

// (2)callbackを利用(errback省略):非推奨
kintoneProxy('http://***.net', method, headers, params, function(resp){
  console.log(JSON.parse(resp));
});

// (3)callbackを利用(errbackも定義)
kintoneProxy('http://***.net', method, headers, params, function(resp){
  console.log(JSON.parse(resp));
}, function(err){
  console.log(err);
});

成功時のコールバックの引数が元々3つだったものが1つになるところと、それがテキストであるところが特徴的です。用途によってはJSON.parseをラッピングの一部にしてしまうのもありだと思いますが、kintone.proxy()はJSON形式のレスポンスに縛られている訳ではありませんので、今回はテキストのままとしました。kintone.proxy() や kintone.plugin.app.proxy() 利用時のヒントにして頂ければ幸いです。
 


株式会社ジョイゾー