WordPressにはREST APIが標準搭載されており、これを拡張することで、独自に作成したデータベーステーブルの情報を外部システムから利用できるAPIとして公開できます。ここでは、カスタムテーブルのデータを取得するAPIの作り方を紹介します。
1. 準備:カスタムテーブル「movie_reviews」の例
まず、今回の例ではカスタムテーブルとして「movie_reviews」を利用します。
このテーブルには、以下のようなカラムがあると仮定します。
- id:レビューID(自動採番)
- title:映画のタイトル
- review:レビュー本文
- rating:評価(数値)
- review_date:レビュー投稿日
※実際のテーブル作成は、プラグインやテーマの初期化処理などで行いますが、ここではテーブルは既に存在している前提です。
2. REST APIエンドポイントの作成
2-1. エンドポイントの基本登録
WordPressのfunctions.php
または専用プラグインファイルに、以下のコードを追加します。
このサンプルコードでは、GETリクエストにより「movie_reviews」テーブルの全件データを取得し、JSON形式で返すエンドポイントを登録します。
<?php
// functions.php または専用プラグインに以下のコードを追加
/**
* GETリクエスト用のエンドポイントを登録する関数
*/
function register_movie_reviews_get_endpoint() {
register_rest_route('reviews/v1', '/list/', array(
'methods' => 'GET',
'callback' => 'get_movie_reviews',
'permission_callback' => '__return_true', // 認証不要(誰でもアクセス可能)
));
}
add_action('rest_api_init', 'register_movie_reviews_get_endpoint');
/**
* 「movie_reviews」テーブルからデータを取得してレスポンスとして返すコールバック関数
*
* @param WP_REST_Request $request リクエスト情報
* @return WP_REST_Response レスポンス
*/
function get_movie_reviews(WP_REST_Request $request) {
global $wpdb;
$table_name = $wpdb->prefix . 'movie_reviews';
// テーブルから全件取得(必要に応じてWHERE句やORDER BYなどで絞り込み可能)
$results = $wpdb->get_results("SELECT * FROM {$table_name}", ARRAY_A);
if ( empty($results) ) {
return new WP_REST_Response('No reviews found.', 200);
}
// 結果をJSON形式で返す
return new WP_REST_Response($results, 200);
}
2-2. エンドポイントのURL
上記のコードを有効にすると、以下のURLでデータ取得APIにアクセスできます。
(※サイトURLは実際のドメインに置き換えてください。)
https://yourdomain.com/wp-json/reviews/v1/list/
3. PythonからAPIを利用する例
WordPress側で公開したエンドポイントは、Pythonのrequests
ライブラリを使って簡単にデータ取得が可能です。以下は、PythonからGETリクエストを発行し、映画レビュー情報を取得するサンプルコードです。
import requests
# REST APIエンドポイントのURL
url = "https://yourdomain.com/wp-json/reviews/v1/list/"
# GETリクエストを送信
response = requests.get(url)
if response.status_code == 200:
# レスポンスのJSONを辞書型に変換して利用
data = response.json()
print("Movie Reviews:", data)
else:
print("Error:", response.status_code, response.text)
このコードを実行すると、WordPress側で取得した「movie_reviews」テーブルのデータが表示されます。
4. セキュリティと運用上の注意点
認証とアクセス制御
- 上記サンプルでは、
permission_callback
に__return_true
を指定しているため、認証不要で誰でもアクセスできる状態です。 - 公開APIとして利用する場合、必要に応じてアクセス制御やCORS(クロスオリジンリソースシェアリング)の設定を検討が必要です。
SQLインジェクション対策
- 今回のサンプルは全件取得の単純なクエリですが、ユーザー入力をもとにSQLを組み立てる場合は、
$wpdb->prepare()
を利用した処理が必要です。
キャッシュとパフォーマンス
- データ件数が多い場合や頻繁にアクセスされる場合は、キャッシュの導入を検討することもおすすめです。
5. まとめ
WordPressのREST APIを拡張することで、独自に作成したカスタムデータベーステーブル(今回の例では「movie_reviews」)を外部システムから簡単に利用できるAPIとして公開できます。
– エンドポイントの登録
register_rest_route()
を使い、GETリクエストでデータ取得用のエンドポイントを実装。
– アクセス制御
サンプルでは認証なしの設定ですが、用途に応じて適切な制御を実施。
– Pythonからの利用
requests
ライブラリなどを使って、外部からデータを取得できる。
以下では認証情報ありのAPIにする方法を紹介しています。