Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Belajar membina API RESTful menggunakan PHP dan MySQL

Belajar membina API RESTful menggunakan PHP dan MySQL

PHPz
PHPzasal
2023-06-19 16:06:46760semak imbas

Dengan pembangunan pembangunan web, RESTful API telah menjadi salah satu piawaian untuk aplikasi web moden. Berbanding dengan API tradisional, API RESTful lebih fleksibel dan berskala. PHP dan MySQL, sebagai alat pembangunan web yang digunakan secara meluas, juga boleh digunakan untuk membina API RESTful. Artikel ini akan memperkenalkan secara terperinci cara membina API RESTful menggunakan PHP dan MySQL, serta memberikan contoh dan pertimbangan kod.

1. Pengenalan kepada RESTful API

RESTful API ialah borang reka bentuk API Web berdasarkan protokol HTTP dan format data standard. Ia biasanya menggunakan kata kerja HTTP (GET, POST, PUT, DELETE, dll.) untuk beroperasi pada sumber dan menggunakan kod status HTTP untuk mewakili hasil operasi. Prinsip reka bentuk RESTful API termasuk sumber, pemindahan keadaan perwakilan, antara muka bersatu, pembendungan diri dan hipermedia.

2. Gunakan PHP dan MySQL untuk membina API RESTful

  1. Pasang dan konfigurasikan PHP dan MySQL

Mula-mula anda perlu memasang dan mengkonfigurasi PHP dan MySQL , yang tidak dibincangkan di sini. Selepas pemasangan selesai, anda boleh menggunakan fungsi phpinfo untuk mengesahkan sama ada PHP berfungsi dengan betul, atau mencipta pangkalan data ujian dalam MySQL untuk mengesahkan sama ada MySQL berfungsi dengan betul.

  1. Buat struktur asas API RESTful

Seterusnya, anda perlu mencipta struktur asas API RESTful. Yang pertama ialah sambungan pangkalan data, menggunakan kod berikut:

<?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();
}
 
?>

Perlu diingat bahawa sambungan mysqli berorientasikan objek digunakan di sini dan bukannya kaedah sambungan mysql tradisional.

Seterusnya, anda perlu mencipta kelas API RESTful asas, yang mentakrifkan gelagat permintaan dan respons HTTP. Empat kata kerja HTTP ditakrifkan di sini: GET, POST, PUT dan DELETE. Gunakan kod berikut:

<?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() {}
 
}
 
?>

Pembina kelas ini akan menghuraikan kaedah, laluan dan parameter dalam permintaan HTTP dan menyimpannya dalam sifat objek. Kemudian panggil kaedah yang sepadan mengikut kaedah HTTP untuk memproses permintaan.

  1. Laksanakan operasi CRUD RESTful API

Seterusnya, anda perlu melaksanakan operasi CRUD dalam kelas RESTful API. Mengambil pengguna sebagai contoh, gunakan kod berikut:

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;
    }
 
}

Kelas UserAPI ditakrifkan di sini dan melaksanakan kaedah cipta, baca, kemas kini dan padam. Untuk permintaan POST, data Json akan dihuraikan ke dalam nama pengguna, kata laluan dan alamat e-mel, dan dimasukkan ke dalam jadual pengguna untuk permintaan GET, jika URL mengandungi parameter id, maklumat pengguna yang sepadan akan dikembalikan, jika tidak, semua maklumat pengguna akan; dikembalikan; untuk permintaan PUT, huraikan data Json ke dalam nama pengguna, kata laluan dan alamat e-mel, dan kemas kini maklumat pengguna yang sepadan untuk permintaan DELETE, padamkan pengguna yang sepadan mengikut parameter id dalam URL.

  1. Gunakan RESTful API

Selepas mencipta RESTful API, anda boleh menggunakan alatan seperti curl untuk menguji sama ada API berfungsi dengan betul. Gunakan arahan curl berikut untuk mencipta pengguna ke API RESTful:

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

Gunakan arahan curl berikut untuk mengembalikan semua pengguna:

curl http://localhost/user

Gunakan arahan curl berikut untuk mengemas kini maklumat pengguna:

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

Gunakan Arahan curl berikut untuk memadam pengguna:

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

3. Nota

Anda perlu memberi perhatian kepada perkara berikut semasa membina API RESTful:

  1. Keselamatan pangkalan data. API RESTful biasanya perlu berinteraksi dengan pangkalan data dan mungkin terdapat isu keselamatan seperti suntikan SQL. Pertanyaan berparameter dan kaedah lain perlu digunakan untuk memastikan keselamatan data.
  2. Isu merentas domain. API RESTful mungkin dipanggil oleh aplikasi di bawah nama domain yang berbeza, menyebabkan masalah merentas domain. Access-Control-Allow-Origin dan pengepala HTTP lain yang berkaitan perlu ditetapkan.
  3. Kawalan versi API. Kawalan versi perlu dipertimbangkan semasa mereka bentuk API RESTful untuk mengelak daripada menjejaskan API sedia ada.
  4. Kod status HTTP. Nilai pulangan API RESTful perlu menggunakan kod status HTTP dengan betul untuk mewakili hasil permintaan.

4. Ringkasan

Artikel ini memperkenalkan cara menggunakan PHP dan MySQL untuk membina API RESTful, dan menyediakan contoh kod dan langkah berjaga-jaga. Kelebihan RESTful API ialah fleksibiliti, skalabiliti, penyelenggaraan mudah, dsb. Ia merupakan bahagian yang amat diperlukan dalam pembangunan web. Apabila menggunakan API RESTful, anda perlu memberi perhatian kepada isu seperti keselamatan, isu merentas domain, kawalan versi dan kod status HTTP.

Atas ialah kandungan terperinci Belajar membina API RESTful menggunakan PHP dan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn