ホームページ >バックエンド開発 >PHPチュートリアル >PHP と MySQL を使用して RESTful API を構築する方法を学ぶ

PHP と MySQL を使用して RESTful API を構築する方法を学ぶ

PHPz
PHPzオリジナル
2023-06-19 16:06:46853ブラウズ

Web 開発の発展に伴い、RESTful API は最新の Web アプリケーションの標準の 1 つになりました。従来の API と比較して、RESTful API はより柔軟でスケーラブルです。 Web 開発ツールとして広く使用されている PHP と MySQL は、RESTful API の構築にも使用できます。この記事では、PHP と MySQL を使用して RESTful API を構築する方法を詳しく紹介し、コード例と考慮事項を示します。

1. RESTful API の概要

RESTful API は、HTTP プロトコルと標準データ形式に基づいた Web API 設計形式です。通常、HTTP 動詞 (GET、POST、PUT、DELETE など) を使用してリソースを操作し、HTTP ステータス コードを使用して操作結果を表します。 RESTful API の設計原則には、リソース、表現状態の転送、統一インターフェイス、自己包含、ハイパーメディアが含まれます。

2. PHP と MySQL を使用して RESTful API を構築する

  1. PHP と MySQL をインストールして構成する

まず、PHP と MySQL をインストールして構成する必要があります、これについてもここでは説明しません。インストールが完了したら、phpinfo 関数を使用して PHP が適切に動作しているかどうかを確認したり、MySQL でテスト データベースを作成して MySQL が適切に動作しているかどうかを確認したりできます。

  1. RESTful API の基本構造の作成

次に、RESTful API の基本構造を作成する必要があります。 1 つ目は、次のコードを使用したデータベース接続です:

<?php
 
//数据库连接参数 
define('DB_HOST', 'localhost'); 
define('DB_USER', 'root'); 
define('DB_PASS', ''); 
define('DB_NAME', 'test');
 
//建立数据库连接 
function connect() {
    $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    if(mysqli_connect_errno()) {
        die("Database connection failed: " . mysqli_connect_error());
    }
    return $mysqli;
}
 
//关闭数据库连接 
function disconnect($mysqli) {
    $mysqli -> close();
}
 
?>

ここでは、従来の mysql 接続方法ではなく、オブジェクト指向の mysqli 接続が使用されていることに注意してください。

次に、HTTP リクエストとレスポンスの動作を定義する基本的な RESTful API クラスを作成する必要があります。ここでは、GET、POST、PUT、DELETE という 4 つの HTTP 動詞が定義されています。次のコードを使用します。

<?php
 
require_once('db_connect.php');
 
class Rest {
 
    protected $request;
    protected $mysqli;
    protected $method;
    protected $args;
    protected $resource = '';
    protected $statusCodes = array(
        200 => 'OK',
        201 => 'Created',
        202 => 'Accepted',
        204 => 'No Content',
        400 => 'Bad Request',
        401 => 'Unauthorized',
        403 => 'Forbidden',
        404 => 'Not Found',
        406 => 'Not Acceptable',
        500 => 'Internal Server Error'
    );
 
    public function __construct() {
        $this -> mysqli = connect();
        $this -> request = explode('/', trim($_SERVER['PATH_INFO'], '/'));
        $this -> method = $_SERVER['REQUEST_METHOD'];
        $this -> args = $_SERVER['QUERY_STRING'];
        $this -> resource = array_shift($this -> request);
    }
 
    public function processRequest() {
 
        switch($this -> method) {
            case 'POST':
                $response = $this -> create();
                break;
            case 'PUT':
                $response = $this -> update();
                break;
            case 'DELETE':
                $response = $this -> delete();
                break;
            case 'GET':
            default:
                $response = $this -> read();
                break;
        }
 
        header('HTTP/1.1 ' . $this -> statusCodes[$response['status']]);
        header('Content-Type: application/json; charset=utf-8');
 
        return json_encode($response['data']);
    }
 
    protected function create() {}
    protected function read() {}
    protected function update() {}
    protected function delete() {}
 
}
 
?>

このクラスのコンストラクターは、HTTP リクエスト内のメソッド、パス、パラメーターを解析し、オブジェクトのプロパティに保存します。次に、HTTP メソッドに従って対応するメソッドを呼び出し、リクエストを処理します。

  1. RESTful API の CRUD 操作を実装する

次に、RESTful API クラスに CRUD 操作を実装する必要があります。ユーザーを例として、次のコードを使用します。

class UserAPI extends Rest {
 
    public function create() {
        $data = json_decode(file_get_contents("php://input"), true);
        $username = $data['username'];
        $password = $data['password'];
        $email = $data['email'];
 
        if(!empty($username) && !empty($password) && !empty($email)) {
            $stmt = $this -> mysqli -> prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
            $stmt -> bind_param("sss", $username, $password, $email);
            $stmt -> execute();
            $stmt -> close();
            $response['status'] = 201;
            $response['data'] = "User created successfully.";
        } else {
            $response['status'] = 400;
            $response['data'] = "Invalid parameters.";
        }
 
        return $response;
    }
 
    public function read() {
        $id = array_shift($this -> request);
        if(empty($id)) {
            $result = $this -> mysqli -> query("SELECT * FROM users");
            while($row = $result -> fetch_assoc()) {
                $data[] = $row;
            }
            $response['status'] = 200;
            $response['data'] = $data;
        } else {
            $result = $this -> mysqli -> query("SELECT * FROM users WHERE id = $id");
            if($result -> num_rows == 1) {
                $response['status'] = 200;
                $response['data'] = $result -> fetch_assoc();
            } else {
                $response['status'] = 404;
                $response['data'] = "User not found.";
            }
        }
        return $response;
    }
 
    public function update() {
        $id = array_shift($this -> request);
        $data = json_decode(file_get_contents("php://input"), true);
        $username = $data['username'];
        $password = $data['password'];
        $email = $data['email'];
 
        if(!empty($username) && !empty($password) && !empty($email)) {
            $stmt = $this -> mysqli -> prepare("UPDATE users SET username=?, password=?, email=? WHERE id=?");
            $stmt -> bind_param("sssi", $username, $password, $email, $id);
            $stmt -> execute();
            $stmt -> close();
            $response['status'] = 200;
            $response['data'] = "User updated successfully.";
        } else {
            $response['status'] = 400;
            $response['data'] = "Invalid parameters.";
        }
 
        return $response;
    }
 
    public function delete() {
        $id = array_shift($this -> request);
        $result = $this -> mysqli -> query("SELECT * FROM users WHERE id = $id");
        if($result -> num_rows == 1) {
            $this -> mysqli -> query("DELETE FROM users WHERE id = $id");
            $response['status'] = 200;
            $response['data'] = "User deleted successfully.";
        } else {
            $response['status'] = 404;
            $response['data'] = "User not found.";
        }
        return $response;
    }
 
}

ここでは UserAPI クラスが定義され、作成、読み取り、更新、および削除のメソッドを実装します。 POST リクエストの場合、Json データはユーザー名、パスワード、電子メール アドレスに解析され、users テーブルに挿入されます。GET リクエストの場合、URL に id パラメーターが含まれている場合は、対応するユーザー情報が返され、それ以外の場合はすべてのユーザー情報が返されます。 PUT リクエストの場合は、Json データをユーザー名、パスワード、メール アドレスに解析し、対応するユーザーの情報を更新します。DELETE リクエストの場合は、URL の id パラメーターに従って、対応するユーザーを削除します。

  1. RESTful API の使用

RESTful API を作成した後、curl などのツールを使用して、API が適切に動作しているかどうかをテストできます。次のcurlコマンドを使用して、RESTful APIに対するユーザーを作成します:

curl -H "Content-Type: application/json" -X POST -d '{
    "username":"testuser",
    "password":"testpassword",
    "email":"testuser@example.com"
}' http://localhost/user

次のcurlコマンドを使用して、すべてのユーザーを返します:

curl http://localhost/user

次のcurlコマンドを使用して、ユーザー情報を更新します:

curl -H "Content-Type:application/json" -X PUT -d '{
    "username":"newusername",
    "password":"newpassword",
    "email":"newusername@example.com"
}' http://localhost/user/1

次のcurlコマンドを使用してユーザーを削除します:

curl -X DELETE http://localhost/user/1

3. 注意事項

RESTful APIを構築する場合は、次の点に注意する必要があります:

  1. データベースのセキュリティ。 RESTful API は通常、データベースと対話する必要があり、SQL インジェクションなどのセキュリティ上の問題が発生する可能性があります。データのセキュリティを確保するには、パラメータ化されたクエリやその他の方法を使用する必要があります。
  2. クロスドメインの問題。 RESTful API は、異なるドメイン名のアプリケーションによって呼び出され、クロスドメインの問題が発生する可能性があります。 Access-Control-Allow-Origin およびその他の関連する HTTP ヘッダーを設定する必要があります。
  3. API バージョン管理。 RESTful API を設計するときは、既存の API への影響を避けるためにバージョン管理を考慮する必要があります。
  4. HTTPステータスコード。 RESTful API の戻り値は、HTTP ステータス コードを正しく使用してリクエストの結果を表す必要があります。

4. 概要

この記事では、PHP と MySQL を使用して RESTful API を構築する方法を紹介し、コード例と注意事項を示します。 RESTful API の利点は、柔軟性、拡張性、メンテナンスの容易さなどです。Web 開発には不可欠な部分です。 RESTful API を使用する場合は、セキュリティ、クロスドメインの問題、バージョン管理、HTTP ステータス コードなどの問題に注意する必要があります。

以上がPHP と MySQL を使用して RESTful API を構築する方法を学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。