Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

ステータスコード200だがkintoneにレコード登録されない

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

コードをいじっていたらREST APIでkintoneレコード登録がうまくいかなくなり、検証のためにVSCodeの「REST API」機能拡張で以下のようなリクエストを投げた。

POST https://{{subdomain}}.cybozu.com/k/v1/records.json HTTP/1.1
Host: {{subdomain}}.cybozu.com:443
X-Cybozu-Authorization:{{base64encoded}}
Content-Type: application/json

{"app":6,"records":[
    [
      {
        "salesid":{"value":187},
        "salesdate":{"value":"2020-12-31"},
        "totalamount":{"value":null},
        "tax_included":{"value":0},
        "torihikisaki":{"value":"S"},
        "segment":{"value":"AA003"},
        "tbl_products":{
          "value":[
            {"value":{"productid":{"value":"L1001"},
            "productname":{"value":"K04"},
            "qty":{"value":1},
            "amount":{"value":0},
            "tax":{"value":0}}}
          ]
        }
      }
    ],
    [
      {
        "salesid":{"value":189},
        "salesdate":{"value":"2020-12-31"},
        "totalamount":{"value":null},
        "tax_included":{"value":0},
        "torihikisaki":{"value":"日本"},
        "segment":{"value":"AA003"},
        "tbl_products":{
          "value":[
            {
              "value":{
                "productid":{"value":"L1001"},
                "productname":{"value":"K04"},
                "qty":{"value":1},
                "amount":{"value":0},
                "tax":{"value":0}
              }
            }
          ]
        }
      }
    ]
  ]
}

戻ってくるレスポンスはステータスコードが200なのに、戻り値が空になっており、レコードの登録もされていない。

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 18 Jan 2021 02:27:35 GMT
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
Cache-Control: no-cache, no-store, must-revalidate
X-ConcurrencyLimit-Limit: 100
X-ConcurrencyLimit-Running: 1
Set-Cookie: JSESSIONID=RsM3r5Exd9vwAqwTQPLEM8Fti6rzlRnI1XXNWrTYTSliUwzWqalUdd7pZuJCzN0v; Path=/; Secure; HttpOnly; SameSite=Lax
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Strict-Transport-Security: max-age=315360000; includeSubDomains; preload;
X-UA-Compatible: IE=Edge
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Encoding: gzip

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

疎通には成功しているのに登録されない、こんな現象に初めて遭遇したので困惑したのだが、cybozu developer networkで探したら似た事例があった。

https://developer.cybozu.io/hc/ja/community/posts/900002762723-VBA%E3%81%A7kintone%E3%81%AB1%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E7%99%BB%E9%8C%B2%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C-%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E7%99%BB%E9%8C%B2%E3%81%95%E3%82%8C%E3%81%9A%E3%81%AB%E7%A9%BA%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8C%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%82%8B?input_string=%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89200%E3%81%A0%E3%81%8Ckintone%E3%81%AB%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E7%99%BB%E9%8C%B2%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84developer.cybozu.io

よく見るとrecordの項目が配列になっている。

自分の方もよく見ると、recordsの項目が、二重の配列になっていた。

これでエラー帰って来ないのはちょっと納得いかないが、まあ原因がわかったので良しとしよう……。