PHPからのRESTAPI登録

お世話になります。

先日devCampに参加し、RESTAPIの基礎を学びました。

早速、PHPから登録するコードを作成したのですが、うまく動きません。

間違っている箇所をご指摘いただけると幸いです。

firefox開発ツールのconsoleで試したものが下記でうまく登録できました。

 var body={
    “app”:“63”,
    “record”:{
        “整理番号”:{“value”:1001},
        “RecTime2”:{“value”:“6:00:00”}
    }
};

kintone.api(
    kintone.api.url(“/k/v1/record”,true),
    “POST”,
    body,
    function(resp){
        console.log(JSON.stringify(resp));
    },function(e){
        console.log(“error:”+e.message);
    }
);

同じ事をPHPで作成したものが下記ですが、エラー(failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request)が出ます。

※コードはCstap落合さんが2014/7/22に投稿された、「REST APIの認証設定について」を流用しました。なお、落合さんが作成されたコードではエラーは出ません。

// リクエストヘッダ
$header = array(
    "Host: " . $subDomain . “.cybozu.com:443”,
    “Content-Type: application/json”,
    “X-Cybozu-API-Token: “. $API_TOKEN
);
 
// アプリID
$appId = 99;
 
// HTTPコンテキスト
$context = array(
  “http” => array(
    “method” => ‘PUT’,
    “header” => implode(”\r”, $header),
    “content” => json_encode(
      array(
        “app” => $appId,
        “record” => array(
           “整理番号” => array(“value” => 1001),
           “RecTime2” => array(“value” => “6:00:00”)
        )
      )
    )
  )
);
 
$result = file_get_contents(
        “https://” . $subDomain . “.cybozu.com/k/v1/record.json”, // URI
        false, // use_include_pathは必要ないのでfalse
        stream_context_create($context) // コンテキストの生成
);

 

よろしくお願いいたします。

山下真史さん

 

consoleで試されているのは、POST/recordですが、PHPはPUT/recordになっています。後者は、更新処理ですし、レコードIDの指定が必要です。もしくは、後者をPOSTにすれば通ると思います。

 

ちなみに、釈迦に説法かもしれませんが、file_get_contentsはエラーが拾いにくそうですし、実践では落合さんが作られたライブラリや生のcURL、落合さんが使われているようなPHPのライブラリ類を利用しておいた方がいいのかなぁと思いました。

Ryu Yamashitaさん

 

早速のコメントありがとうございました。

POSTとPUT・・気がつきませんでした。修正したところ難なく登録できました。

(これで3日間ほど悩んでいたのですが・・・)

また、ライブラリの利用のアドバイスをいただきありがとうございます。そうですね、ライブラリを活用するようにいたします。釈迦に説法どころか、天の声になりました。

 

引き続き、よろしくお願いいたします。ありがとうございました。

解決されたようで良かったです。