Skip to content

hideki-a/pcmsx-php-restful-api-client

Repository files navigation

PowerCMS X RESTful API PHP Client

PHPでPowerCMS XのRESTful APIを素早く・簡単に利用するためのライブラリです。

動作条件

  • PHP version 8.1 or higher

※Enumを使用しているためで、PHP 8.0.xへの対応は検討中です。(なお、RHEL9等のバックポートを除き、PHP 8.0.xの公式サポートは終了しています。)

インストール

  1. srcディレクトリを任意の場所に配置します(ディレクトリ名は適宜変更してください)
  2. APIを利用したいファイルにてrequire_onceを利用してsrc/ClientBuilder.phpを読み込みます

サンプルコード

examplesディレクトリもご覧ください。

クライアントの準備

require_once 'path' . DS . 'to' . DS . 'ClientBuilder.php';

use PowerCMSX\RESTfulAPI\ClientBuilder;

$client = ClientBuilder::create()
    ->setApplicationUrl('https://powercmsx.localhost/app/api')
    ->setAuthConfig('username', 'password') // 認証を実行する場合のみ設定
    ->setSSLVerification(false) // SSLの検証をスキップする場合のみ設定
    ->setResponseAssociative(true); // レスポンスを連想配列形式で受け取りたい時のみ指定

オブジェクトの取得

$entry = $client->getObject('entry', 0, 1); // 引数: モデル, ワークスペースID, オブジェクトID
var_dump($entry->title); // →記事タイトルが表示されます

メソッド一覧

powercmsx/docs/README-RESTfulAPI.mdもあわせてご確認ください。

createObject

オブジェクトを作成します。

引数

  • model: string モデル(必須)
  • workspaceId: int ワークスペースID(必須)
  • data: array リクエストボディ(必須)

listObjects

オブジェクト一覧を取得します。

引数

  • model: string モデル(必須)
  • workspaceId: int ワークスペースID(必須)
  • data: array クエリストリングの値
  • useAuthentication: bool 認証を実行するか否か

getObject

オブジェクトを取得します。

引数

  • model: string モデル(必須)
  • workspaceId: int ワークスペースID(必須)
  • query: int | string オブジェクトID(またはベースネーム)(必須)
  • useAuthentication: bool 認証を実行するか否か
  • cols: array 取得するカラム

updateObject

オブジェクトを更新します。

引数

  • model: string モデル(必須)
  • workspaceId: int ワークスペースID(必須)
  • id: int オブジェクトID(必須)
  • data: object リクエストボディ(必須)

deleteObject

オブジェクトを削除します。

引数

  • model: string モデル(必須)
  • workspaceId: int ワークスペースID(必須)
  • id: int オブジェクトID(必須)

runCurl

cURL関数を実行します。プラグインで追加したエンドポイントにアクセスする際に使用します。

引数

  • path: string パス(必須) ※ワークスペースIDから指定します(例:/0/api_client_test
  • method: HttpMethod HTTPメソッド(必須)
  • data: array リクエストボディまたはクエリストリングの値(必須)
  • useAuthentication: bool 認証を実行するか否か

search

全文検索を実行します。

引数

  • model: string モデル(必須)
  • workspaceId: int ワークスペースID(必須)
  • data: array 検索パラメータ(必須)

contact

フォーム投稿を実行します。

引数

  • workspaceId: int ワークスペースID(必須)
  • id: int オブジェクトID(必須)
  • method: ContactMethod コンタクトメソッド(必須)
  • data: object リクエストボディ

ContactMethodは以下から選択します。

  • トークンの取得: ContactMethod::Token
  • 投稿内容の確認: ContactMethod::Confirm
  • 投稿内容の送信: ContactMethod::Submit

requestCustomEndpoint

カスタムエンドポイントへのリクエストを実行します。

引数

  • endpointName: string エンドポイント名(必須)
  • workspaceId: int ワークスペースID(必須)
  • method: HttpMethod HTTPメソッド(必須)
  • data: array リクエストボディまたはクエリストリングの値
  • useAuthentication: bool 認証を実行するか否か

HttpMethodは以下から選択します。

  • GET: HttpMethod::GET
  • POST: HttpMethod::POST
  • PUT: HttpMethod::PUT
  • DELETE: HttpMethod::DELETE

補足

ステータスの設定

PowerCMSX\ObjectStatusを利用するとステータスの値を覚えることなく設定できます。

  • ObjectStatus::Draft: 下書き
  • ObjectStatus::Review: レビュー
  • ObjectStatus::ApprovalPending: 承認待ち
  • ObjectStatus::Reserved: 公開予約
  • ObjectStatus::Publish: 公開
  • ObjectStatus::Ended: 終了
use PowerCMSX\RESTfulAPI\ClientBuilder;
use PowerCMSX\ObjectStatus;

$data = [
    'title' => 'APIのテスト',
    'basename' => 'api_test',
    'status' => ObjectStatus::ApprovalPending->value, // 2が出力され承認待ちになる
];
$entry = $client->createObject('entry', 15, $data);

同様に、PowerCMSX\ObjectEnabledを利用すると有効・無効の値が取得できます。

  • ObjectEnabled::Disable: 無効
  • ObjectEnabled::Enable: 有効

アセット等のバイナリデータ(ファイル)のData URIスキーム変換

AssetUtilities::encodeBase64メソッドにファイルパスを渡すとData URIスキームに変換します。出力された値をDataにセットしてください。

require_once '/path/to/powercmsx/app/lib/Prototype/class.PTUtil.php';
require_once 'src/classes/AssetUtilities.php';

use PowerCMSX\RESTfulAPI\AssetUtilities;

$data = [
    'assets' => [
        [
            'file' => [
                'Label' => 'ラベルまたは代替テキスト',
                'Data'  => AssetUtilities::encodeBase64(__DIR__ . '/assets/test.png'),
                'Path'  => '%r/assets/test.png',
            ]
        ]
    ]
];

APIとの接続が確立しない場合の調査方法

オブジェクトを操作するメソッドをtry...catch文で囲むと、cURL操作のエラーメッセージが取得できる可能性があります。

try {
    $entries = $client->listObject('entry', 4, $data);
} catch (Exception $error) {
    echo $error->getMessage() . PHP_EOL; // → 例えば「SSL certificate problem: self-signed certificate」のようなメッセージ
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages