PHP Tips : HTTP_Request2 を利用した kintone REST API の扱い方

著者名: 落合 雄一 (External link)

目次

はじめに

kintone REST API を PHP で扱う場合にはいろいろ選択肢がありますが、中でも PEAR の HTTP_Request2 (External link) は有力な候補のひとつです。
ここでは、 複数のレコードを取得する 例をもとに簡単なサンプルを紹介します。

HTTP_Request2 のインストール

インストールは PEAR や PEAR2 を使った方法のほか、最新版の tgz をダウンロードして任意の場所に解凍してもよいかと思います。
しかし、利用する際にはパスを把握しておく必要がありますので気を付けてください。

参考: PEAR のインストール方法 (External link) HTTP_Request2 のインストール方法 (External link)

サンプルコード

指定したアプリケーションのレコードを最大 100 件取得し、結果をダンプ出力するサンプルです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
/*
 * php sample program
 * Copyright (c) 2014 Cybozu
 * 
 * Licensed under the MIT License
 * https://opensource.org/license/mit/
 */

// HTTP_Request2
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)
);

try {
    // リクエスト作成
    $request = new HTTP_Request2();
    $request->setHeader($header);
    $request->setUrl("https://" . $subDomain . ".cybozu.com/k/v1/records.json");
    $request->setMethod(HTTP_Request2::METHOD_GET);
    $request->setBody(json_encode(array("app" => $appId)));
    $request->setConfig(array(
      'ssl_verify_host' => false,
      'ssl_verify_peer' => false
    ));

    // レスポンス取得
    $response = $request->send();

// HTTP_Request2のエラーを表示
} catch (HTTP_Request2_Exception $e) {
    die($e->getMessage());
// それ以外のエラーを表示
} catch (Exception $e) {
    die($e->getMessage());
}

// エラー時
if ($response->getStatus() != "200") {
  echo sprintf("status: %s\n", $response->getStatus());
  echo sprintf("cybozu error: %s\n", $response->getHeader('x-cybozu-error'));
  echo sprintf("body: \n%s\n", $response->getBody());
  die;
}

$data = json_decode($response->getBody(), true);
var_dump($data);

サンプルコードの解説

リクエスト

29
30
31
32
33
34
35
36
37
38
// リクエスト作成
$request = new HTTP_Request2();
$request->setHeader($header);
$request->setUrl("https://" . $subDomain . ".cybozu.com/k/v1/records.json");
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setBody(json_encode(array("app" => $appId)));
$request->setConfig(array(
  'ssl_verify_host' => false,
  'ssl_verify_peer' => false
));

ここでは、HTTP_Request2 のインスタンスを生成し、必要な情報を設定しています。
HTTP リクエストヘッダーは、「Host」、「Content-Type」、「X-Cybozu-Authorization」の配列を指定します。
参考: PHP Tips : kintone REST API の認証設定について

また、HTTP メソッドやリクエストボディを設定しています。
参考: 複数のレコードを取得する
注意点として、HTTP メソッドは GET にしておくことをお忘れなく。
ここを POST にしてしまうと、 複数のレコードを登録する API の実行になるため、エラーが発生します。

レスポンス取得部

40
41
// レスポンス取得
$response = $request->send();

この一行で kintone REST API へリクエストを投げ、$response 変数に レスポンスのオブジェクト (External link) を格納します。

複数のレコードを取得するのレスポンス ような結果が得られたのではないでしょうか?

おわりに

PEAR の HTTP_Request2 を利用した kintone REST API の扱い方について説明いたしました。
HTTP_Request2 はかなり汎用的な HTTP クライアントライブラリーです。ぜひ使ってみてください。

information

この Tips は、2014 年 7 月版 kintone で動作を確認しています。