1. PHP

REST APIをPHPで実装してみよう【JSONレスポンス対応】

Share

外部サービスやフロントエンドとの連携に欠かせないREST API。PHPでも簡単にAPIを実装できます。

この記事ではPHPでREST APIを作り、JSON形式でレスポンスを返す基本的な方法を解説します。

REST APIとは?

REST APIは「Representational State Transfer」の略で、HTTPのGET、POST、PUT、DELETEなどのメソッドを用いてリソースを操作する仕組みです。

フロントエンド(JavaScriptなど)とバックエンドの通信で多用されています。

APIの基本構造

API用のPHPファイル(例:api.php)を用意し、リクエストの種類に応じて処理を分けます。

<?php
header('Content-Type: application/json; charset=UTF-8');

$requestMethod = $_SERVER['REQUEST_METHOD'];

switch ($requestMethod) {
    case 'GET':
        get_items();
        break;
    case 'POST':
        create_item();
        break;
    default:
        http_response_code(405);
        echo json_encode(['error' => 'Method Not Allowed']);
        break;
}

function get_items() {
    $data = [
        ['id' => 1, 'name' => 'Apple'],
        ['id' => 2, 'name' => 'Banana'],
    ];
    echo json_encode($data);
}

function create_item() {
    $input = json_decode(file_get_contents('php://input'), true);

    if (!isset($input['name'])) {
        http_response_code(400);
        echo json_encode(['error' => 'Missing parameter: name']);
        return;
    }

    // 本来はDB保存など行う
    $newItem = [
        'id' => rand(100, 999),
        'name' => htmlspecialchars($input['name'], ENT_QUOTES, 'UTF-8'),
    ];

    http_response_code(201);
    echo json_encode($newItem);
}
?>

重要ポイント

  • Content-Typeヘッダーapplication/jsonを設定してJSONレスポンスであることを明示します。
  • php://input:POST時のJSONボディを受け取るときに便利です。
  • http_response_code():REST APIでは結果に応じたHTTPステータスコードを返すのがベストプラクティスです。

JSONレスポンスの作り方

PHPでは標準の json_encode() で簡単にJSON文字列を生成できます。

$data = ['message' => 'Hello, World!'];
echo json_encode($data);

配列や連想配列をそのままJSON化できるため便利です。

json_encode() の解説

json_encode() はPHPで配列や連想配列をJSON形式の文字列に変換する標準関数です。

REST APIでJSONレスポンスを作る際に必須の関数です。

基本的な使い方

$array = [
    'id' => 1,
    'name' => 'Apple'
];

$json = json_encode($array);
echo $json;
// 出力例: {"id":1,"name":"Apple"}

エスケープの挙動

  • 特殊文字(日本語など)はUTF-8で正しくエンコードされます。
  • スラッシュや改行をエスケープしたくない場合は、第2引数にオプションを指定できます。
$json = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  • JSON_UNESCAPED_UNICODE:日本語などのマルチバイト文字をエスケープせずそのまま出力。
  • JSON_UNESCAPED_SLASHES:スラッシュをエスケープせずに出力。

エンコードエラーの確認

json_encode() は失敗すると false を返します。

原因は循環参照や不正なデータ型(リソース型など)が含まれる場合です。json_last_error() で原因を調べられます。

$json = json_encode($array);

if ($json === false) {
    echo 'JSONエンコードに失敗しました: ' . json_last_error_msg();
}

json_encode()のまとめ

  • APIでJSONを返す際は必ず json_encode() を使う。
  • 日本語を含む場合は JSON_UNESCAPED_UNICODE オプションで見やすくできる。
  • エンコードに失敗した場合は json_last_error() で原因を特定。

HTTPステータスコードの重要性

APIは成功・失敗を明確に伝えるためにステータスコードを必ず返すようにしましょう。代表的なものは以下の通りです。

ステータスコード意味
200成功(GETなど)
201作成完了(POSTなど)
400クライアントエラー
401認証エラー
403権限エラー
404リソースが存在しない
405許可されていないメソッド

セキュリティ上の注意

  • 必要なAPIには認証(トークンやOAuthなど)を導入しましょう。
  • SQLを利用する場合はSQLインジェクション対策を徹底しましょう。
  • CORS設定で信頼できるドメインからのリクエストのみを許可すると安全性が上がります。

まとめ

PHPでも簡単にREST APIを実装できます。

JSON形式のレスポンスやステータスコードを活用し、フロントエンドとスムーズに連携できるAPIを作成してみてください。

公式リファレンス