レコードを操作する REST API で空の配列を投げたときの挙動が、ちょっと予想外だったので共有します。
内容
以下の REST API に対して、レコードの指定に要素数0の配列を渡したときの挙動を試しました。
console.log(await kintone.api(kintone.api.url('/k/v1/records.json', true), 'POST', { app: kintone.app.getId(), records: [] }));
console.log(await kintone.api(kintone.api.url('/k/v1/records.json', true), 'PUT', { app: kintone.app.getId(), records: [] }));
console.log(await kintone.api(kintone.api.url('/k/v1/records.json', true), 'DELETE', { app: kintone.app.getId(), ids: [] }));
結果
POST と PUT は、何も起こらず正常終了する。DELETE だけ、エラーになる。
複数削除のAPIドキュメントには
- 一度に削除できるレコードは100件までです。
とだけ書かれていて最小要素数は書いていないが、実際のエラーは
[‘一度に1件から100件までのレコードを削除できます。’, ‘必須です。’]
と、最小1件~しか指定できないらしい。
考察
操作するレコードが無いのにAPIを発行するほうが悪いとは思うので、これは致し方ないと思う。が、POST/PUTとDELETEで挙動が違うのは予想外だった。
もしかしたら KintoneRestAPIClient を使っていると、うまく調整してくれるのかもしれないけど、生で触る場合は注意が必要だと思います。
ループの終了条件を間違えちゃうとか、条件に合致したレコードだけ削除する処理で実際には条件に合致するレコードが無いのにそのまま走っちゃうとか。
特にまだ KintoneRestAPIClient が無い時代に書かれたコードは要注意 (1敗)