Как сделать rest api php

Узнайте, как создать REST API на базе PHP с примерами кода и примерами вызовов и ответов. Получите все необходимые знания для построения своего собственного API.

Создание Rest API на PHP

Rest API является стандартным протоколом для обмена данными между приложениями. Он использует HTTP-запросы для получения, обновления, добавления или удаления данных. Для начала создадим базовый класс, который будет использоваться для настройки подключения к базе данных.

class Database {
    // данные для подключения к БД
    private $host = 'localhost';
    private $db_name = 'my_database';
    private $username = 'root';
    private $password = 'password';
    public $conn;
 
    // подключение к базе данных
    public function getConnection(){
 
        $this->conn = null;
 
        try{
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
            $this->conn->exec("set names utf8");
        }catch(PDOException $exception){
            echo "Connection error: " . $exception->getMessage();
        }
 
        return $this->conn;
    }
}

Для начала нам нужно создать базовый класс, который будет служить для настройки подключения к базе данных. Как видите в примере выше, мы задаем параметры подключения к базе данных в переменные, а затем используем их для создания подключения с помощью PHP Data Objects (PDO).

Теперь давайте создадим наш API для работы с данными пользователей. Для этого мы создадим новый класс UserAPI, который будет использовать Базовый класс для подключения к базе данных.

class UserAPI {
 
    // Переменная для хранения экземпляра класса Database
    private $db;
 
    // Конструктор для инициализации переменной db
    public function __construct(){
        $this->db = new Database();
    }
 
    // Метод для получения всех пользователей
    public function getAllUsers(){
        $query = "SELECT * FROM users";
 
        $stmt = $this->db->getConnection()->prepare($query);
        $stmt->execute();
 
        return $stmt;
    }
 
    // Метод для получения одного пользователя
    public function getUser($id){
        $query = "SELECT * FROM users WHERE id = ? LIMIT 0,1";
 
        $stmt = $this->db->getConnection()->prepare($query);
        $stmt->bindParam(1, $id);
        $stmt->execute();
 
        return $stmt;
    }
 
    // Метод для создания пользователя
    public function createUser($username, $email, $password){
        $query = "INSERT INTO users SET username = ?, email = ?, password = ?";
 
        $stmt = $this->db->getConnection()->prepare($query);
        $stmt->bindParam(1, $username);
        $stmt->bindParam(2, $email);
        $stmt->bindParam(3, $password);
 
        if($stmt->execute()){
            return true;
        }
 
        return false;
    }
 
    // Метод для обновления пользователя
    public function updateUser($id, $username, $email, $password){
        $query = "UPDATE users SET username = ?, email = ?, password = ? WHERE id = ?";
 
        $stmt = $this->db->getConnection()->prepare($query);
        $stmt->bindParam(1, $username);
        $stmt->bindParam(2, $email);
        $stmt->bindParam(3, $password);
        $stmt->bindParam(4, $id);
 
        if($stmt->execute()){
            return true;
        }
 
        return false;
    }
 
    // Метод для удаления пользователя
    public function deleteUser($id){
        $query = "DELETE FROM users WHERE id = ?";
 
        $stmt = $this->db->getConnection()->prepare($query);
        $stmt->bindParam(1, $id);
 
        if($stmt->execute()){
            return true;
        }
 
        return false;
    }
}

Как видите в примере выше, мы создали класс UserAPI, который имеет методы для получения, обновления, создания и удаления пользователей. Теперь давайте создадим наш файл API для работы с данными пользователей.

// Подключаем наш базовый и пользовательский классы
require_once 'Database.php';
require_once 'UserAPI.php';
 
// Создаем экземпляр класса Database
$db = new Database();
 
// Создаем экземпляр класса UserAPI
$userAPI = new UserAPI($db);
 
// Получаем метод из URL
$method = $_SERVER['REQUEST_METHOD'];
 
// Обрабатываем запрос
switch ($method) {
    case 'GET':
        // Получаем идентификатор пользователя из URL
        $id = (isset($_GET['id']) ? $_GET['id'] : "");
 
        // Получаем пользователя
        if ($id != "") {
            $data = $userAPI->getUser($id);
        } else {
            $data = $userAPI->getAllUsers();
        }
 
        break;
    case 'POST':
        // Получаем данные из HTTP-запроса
        $username = (isset($_POST['username']) ? $_POST['username'] : "");
        $email = (isset($_POST['email']) ? $_POST['email'] : "");
        $password = (isset($_POST['password']) ? $_POST['password'] : "");
 
        // Создаем пользователя
        $data = $userAPI->createUser($username, $email, $password);
 
        break;
    case 'PUT':
        // Получаем данные из HTTP-запроса
        $id = (isset($_GET['id']) ? $_GET['id'] : "");
        $username = (isset($_POST['username']) ? $_POST['username'] : "");
        $email = (isset($_POST['email']) ? $_POST['email'] : "");
        $password = (isset($_POST['password']) ? $_POST['password'] : "");
 
        // Обновляем пользователя
        $data = $userAPI->updateUser($id, $username, $email, $password);
 
        break;
    case 'DELETE':
        // Получаем идентификатор пользователя из URL
        $id = (isset($_GET['id']) ? $_GET['id'] : "");
 
        // Удаляем пользователя
        $data = $userAPI->deleteUser($id);
 
        break;
    default:
        // Отправляем ошибку
        header('HTTP/1.1 405 Method Not Allowed');
        header('Allow: GET, POST, PUT, DELETE');
        break;
}
 
// Возвращаем данные в формате JSON
header('Content-Type: application/json');
echo json_encode($data);

В примере выше мы создали файл API, который обрабатывает запросы HTTP и возвращает данные в формате JSON. Для работы с данными пользователей мы используем наш класс UserAPI. Теперь давайте попробуем отправить несколько запросов к нашему API и посмотрим, как они будут обрабатываться.

// Получе										

Ответы (0)