見出し画像

PowerCMS X で RESTful API を使う準備

公式ドキュメントはコードサンプルが無いので、こちらに書いていきます。今回は認証まで。

PowerCMS X 管理画面にログインして、システムスコープとワークスペースの設定画面で「APIを有効化」にチェックを入れて保存します。おそらくシステムスコープは不要で、利用するワークスペースだけで大丈夫なはずです。

APIでデータを操作したいモデルも設定が必要です。モデルの設定画面で「APIを有効化」にチェックを入れて保存します。

環境変数を作成します。初期値は true なので不要かもしれないですが念のため。環境変数は多く用意されているのでサイトで確認しておくと良いです。

  • 名前 api_allow_login

  • 値 true

  • タイプ 真偽値

PowerCMS X 管理画面にBasic認証を設定している場合は、PowerCMS X アプリケーションディレクトリの中の「api」フォルダの中にある「.htaccess」を開き、末尾に以下のコードを入れておきます。(IP制限している人も適切な設定をお願いします。)

Satisfy any
order allow,deny
allow from all
Deny from none

一旦、ブラウザから get でデータが表示できるか確認します。
以下のURLでテストしてみてください。

{PowerCMS X 管理画面アドレス}/api/v1/{ワークスペースID}/{モデル名}/get/{オブジェクトID}/

JSONが返ってくれば成功です。Chrome の拡張機能 JSONVue を入れておくと JSONが見やすくなります。

API の authentication はPowerCMS X のユーザー情報が必要ですので、専用に作っておくとよいです。ユーザーを作る際は「管理者」にチェックを入れてください。また、作成したユーザーで PowerCMS X にログインできることを確認しておいてください。実運用時はロールを検討してください。

ビューを開いて、クラスはアーカイブ、ステータスは有効、URLマップのアーカイブ種別はインデックス、URLマップ(ファイル名)は任意に設定、拡張子は .php で作成してください。
以下のPHPコードをビューに貼り付けて、エンドポイント、ユーザー名、パスワード の値を書き換えて、保存と再構築をしてください。

<mt:phpstart>

// エンドポイントURL
$endpoint = "{PowerCMS X 管理画面アドレス}/api/v1/authentication";

// リクエストボディに含めるデータ
$data = array(
    "name" => "{ユーザー名}",
    "password" => "{パスワード}",
    "remember" => true
);

// JSONデータを文字列に変換
$json_data = json_encode($data);

// cURLセッションを初期化
$ch = curl_init();

// cURLオプションを設定
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// リクエストを実行
$response = curl_exec($ch);

// cURLセッションをクローズ
curl_close($ch);

echo $response;

// レスポンスからアクセストークンを取得
$response_data = json_decode($response, true);
$access_token = $response_data['access_token'];

?>

作成したPHPのアドレスにアクセスすると以下の応答が画面に表示されると思います。

{
access_token: "3341a4cfc53c4b6da9aa82b368c42c9f",
expires_in: 1710849450
}

お疲れ様でした。authentication に失敗しすぎるとユーザーロックアウトされる可能性があるのでお気を付けください。

この記事が気に入ったらサポートをしてみませんか?