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