表題の件ですが、レコード取得(GET)をする際、JSONデータをボディにセットしてリクエストするとことができません。
#言語は、C#ですが、レコード登録、更新、削除はJSONボディリクエストの方法で全く問題なくできていました。
プログラムミスかもと思い、FireFoxのアドオン(REST Client)を使用してリクエストを実施したところ、何度実行してもサーバから400(400 Bad Request)になってしまいます。
サポートに伺ったところ、JSON文字列の不正が原因と指摘を受けました。
#cybozu.com Development teamのレコード取得例をそのまま使用しているので誤っていることは考えにくいのですが・・・
<参考>
JSON文字列:アプリ番号:187、レコード番号:557
{
“app”: 187,
“id”: 557
}
言語は問いませんので、GET時にパラメータを JSON形式で送信する方法でレコード取得をされた経験のある方はいらっしゃいますか?
可能であれば、言語を変更して作成してもいいので。
取得可能か不可かを知りたいのです。
ご教授お願いします。
Foodagriの智様
cstapの落合です。
PHPですが、以下のようなソースで、BodyにJSON形式でパラメータを設定して取得できました。
ライブラリはHTTP_Request2を利用しています。
参考になりますでしょうか?
<?php
// 初期設定
require_once ‘HTTP/Request2.php’;
// 認証設定
$subDomain = “your-subdomain”;
$loginName = “your_login_name”;
$password = “your_password”;
// アプリID
$appId = 336;
// リクエストヘッダ
$header = array(
"Host: " . $subDomain . “.cybozu.com:443”,
“Content-Type: application/json”,
"X-Cybozu-Authorization: " . base64_encode($loginName . ‘:’ . $password)
);
// リクエスト作成
$request = new HTTP_Request2();
$request->setHeader($header);
$request->setUrl(“https://” . $subDomain . “.cybozu.com/k/v1/record.json”);
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setBody(json_encode(array(“app” => $appId, “id” => 1)));
$request->setConfig(array(
‘ssl_verify_host’ => false,
‘ssl_verify_peer’ => false
));
// レスポンス取得
$response = $request->send();
if ($response->getStatus() != “200”) {
echo sprintf(“status: %s”, $response->getStatus());
echo sprintf(“cybozu error: %s”, $response->getHeader(‘x-cybozu-error’));
echo sprintf(“body: %s”, $response->getBody());
die;
}
$data = json_decode($response->getBody(), true);
var_dump($data);
OSX iterm から httpie(or cURL) から
http GET "https://XXXXXXX.cybozu.com/k/v1/records.json" "X-Cybozu-API-Token: XXXXXXXXXXXXXX" < param.json
のように外部ファイルにして指定することは可能でした。