PHP Tips : kintone REST API の認証設定について

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

目次

はじめに

kintone REST APIを外部からリクエストするためは、 パスワード認証のためのヘッダーが必要となります。
この認証設定について、PHPでフォーム設計情報を取得するサンプルを交えて説明します。

kintone REST APIに最低限必要な情報は、サブドメインおよびユーザーのログイン名とパスワードです。
また、Basic認証を設定している場合は、Basic認証のログイン名とパスワードも必要となります。

サブドメイン

サブドメインとは、普段アクセスしているcybozu.comのURL「https://sample.cybozu.com」の sample のことです。
このサブドメインは、サイボウズドットコム ストアのドメイン管理で変更できます。

kintone REST APIは、https://sample.cybozu.com/k/v1/(コマンド名).jsonというURLで実行します。
ちなみに、ゲストスペース内アプリの場合は、https://sample.cybozu.com/k/guest/(スペースのID)/v1/(コマンド名).jsonというURLで実行します。

パスワード認証

kintone REST APIを実行するリクエストには、 パスワード認証のためのヘッダーを追加する必要があります。
このヘッダーには、普段利用しているログイン名とパスワードを利用します。
kintone REST API用に新しいユーザーを作成してもよいかもしれません。

パスワード認証は、リクエストヘッダーに「X-Cybozu-Authorization」を追加し、「ログイン名:パスワード」をBASE64エンコードしたものを値に指定します。
PHPで記述すると以下のようになります。

1
"X-Cybozu-Authorization: " . base64_encode('your_login_name:your_password')

Basic 認証

Basic認証は、サイボウズドットコム ストアのセキュリティと認証で設定できます。
設定している場合は、リクエストヘッダーに「Authorization」ヘッダーを追加し、「Basic 」と「ログイン名:パスワード」をBASE64エンコードしたものを値に指定する必要があります。
PHPで記述すると以下のようになります。

1
"Authorization:Basic " . base64_encode('basic_login_name:basic_password')

アプリ ID

アプリIDは、アプリの一覧ページのURLの "k" のあとの部分です。
たとえばURLがhttps://sample.cybozu.com/k/336/の場合、「336」がアプリIDです。

リクエストヘッダー

リクエストヘッダーは、 kintone REST API の共通仕様のリクエストヘッダーを参考に、「Host」、「Content-Type」、「X-Cybozu-Authorization」を設定した配列を用意します。
Basic認証を利用する場合は、以下を追加してください。

1
"Authorization:Basic " . base64_encode($basicLoginName . ':' . $basicPassword)

HTTP コンテキスト

PHPのfile_get_contentsを利用してkintone REST APIでリクエストするには、URLとHTTPコンテキストが必要になります。
HTTPコンテキストを生成するには、stream_context_createを使います。
URLは、https://sample.cybozu.com/k/v1/form.jsonになります。

サンプル

それでは、上記の情報をもとにkintoneアプリのフォーム設計情報を取得し、結果をダンプ出力してみましょう。
フォーム設計情報を取得するAPIは、 フォームの設計情報を取得するです。

 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
<?php
/*
 * php sample program
 * Copyright (c) 2014 Cybozu
 * 
 * Licensed under the MIT License
 * https://opensource.org/license/mit/
 */

// サブドメイン
$subDomain = "your-subdomain";

// ユーザー認証
$loginName = "your_login_name"; // ログイン名
$password = "your_password";    // パスワード

/* Basic認証を設定している場合
  $basicLoginName = "basic_login_name";   // Basic認証のログイン名
  $basicPassword = "basic_password";      // Basic認証のパスワード
 */

// リクエストヘッダ
$header = array(
    "Host: " . $subDomain . ".cybozu.com:443",
    "Content-Type: application/json",
    "X-Cybozu-Authorization: " . base64_encode($loginName . ':' . $password),
    /* Basic認証を設定している場合
      "Authorization:Basic " . base64_encode($basicLoginName . ':' . $basicPassword)
     */
);

// フォーム設計情報を取得するアプリのアプリID
$appId = 336;

// HTTPコンテキスト
$context = array(
    "http" => array(
        "method" => 'GET',
        "header" => implode("\r\n", $header),
        "content" => json_encode(array("app" => $appId))
    )
);

// REST APIでフォーム設計情報を取得
$result = file_get_contents(
        "https://" . $subDomain . ".cybozu.com/k/v1/form.json", // URI
        false, // use_include_pathは必要ないのでfalse
        stream_context_create($context) // コンテキストの生成
);

// ダンプ出力
var_dump(json_decode($result, true));

フォームの設計情報を取得するのレスポンスの例のような結果が得られたのではないでしょうか?

おわりに

kintone REST APIでの認証設定についてご理解いただけましたでしょうか?
kintone REST APIの認証には、APIトークンを利用する方法もあります。
APIトークンについては、 API トークンを使ってみようを参考にしてください。

今回はサンプルとしてfile_get_contentsを利用しましたが、実際にはライブラリを利用した方がよいでしょう。
今後、一般的によく利用されるHTTPクライアントライブラリの「HTTP_Request2」や「guzzle」のTipsも紹介したいと思っています。

information

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