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で動作を確認しています。