Пример простого создания REST API на PHP v.2

CMS.BY

Restful API является одним из наиболее популярных способов взаимодействия между клиентами и серверами. Он позволяет взаимодействовать с сервером и передавать данные в унифицированном формате, который поддерживается большинством платформ.

Давайте разберемся, как создать Restful API на PHP.

Шаг 1: Настройка окружения

Перед тем, как начать использовать Restful API, нам нужно установить все необходимые инструменты и настроить окружение.

Для начала установите PHP, Apache и MySQL.

Нам также понадобится Composer, чтобы управлять зависимостями. Вы можете скачать его с официального сайта: https://getcomposer.org/.

Чтобы установить необходимые библиотеки, создайте файл composer.json в корневой директории проекта и добавьте следующий код:

{
    "require": {
        "slim/slim": "^3.0"
    }
}

Затем запустите команду:

composer install

Он установит Slim Framework, который мы будем использовать для создания нашего Restful API.

Шаг 2: Создание маршрутов

Теперь мы можем начать создавать маршруты для нашего API.

Для этого создайте файл index.php и добавьте следующий код:

require 'vendor/autoload.php';

$app = new \Slim\App;

$app->get('/api/{name}', function ($request, $response, $args) {
    $name = $args['name'];
    return $response->write("Hello, $name");
});

$app->run();

Здесь мы создаем маршрут для нашего API, который передает имя в качестве параметра. Это простой пример, который показывает, как работают маршруты.

Шаг 3: Создание контроллеров

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

Создайте новый файл в папке controllers и назовите его UsersController.php. В этом файле мы будем определять наши методы контроллера.

Добавьте следующий код:

namespace App\Controllers;

use Psr\Http\Message\RequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;

class UsersController
{
    public function index(Request $request, Response $response)
    {
        $response->getBody()->write("Index page");
        return $response;
    }

    public function show(Request $request, Response $response, $args)
    {
        $id = $args['id'];
        $response->getBody()->write("Show page: $id");
        return $response;
    }

    public function store(Request $request, Response $response)
    {
        $data = $request->getParsedBody();
        $response->getBody()->write(json_encode($data));
        return $response;
    }

    public function update(Request $request, Response $response, $args)
    {
        $id = $args['id'];
        $data = $request->getParsedBody();
        $response->getBody()->write("Update page: $id");
        return $response;
    }

    public function delete(Request $request, Response $response, $args)
    {
        $id = $args['id'];
        $response->getBody()->write("Delete page: $id");
        return $response;
    }
}

В этом коде мы определяем методы контроллера для каждого из действий: index, show, store, update, delete.

Шаг 4: Использование контроллеров в маршрутах

Теперь мы можем использовать контроллеры в маршрутах, чтобы обрабатывать запросы к нашему API.

Для этого откройте файл index.php и замените имеющийся маршрут на следующий:

$app->get('/api/user', 'App\Controllers\UsersController:index');
$app->get('/api/user/{id}', 'App\Controllers\UsersController:show');
$app->post('/api/user', 'App\Controllers\UsersController:store');
$app->put('/api/user/{id}', 'App\Controllers\UsersController:update');
$app->delete('/api/user/{id}', 'App\Controllers\UsersController:delete');

Теперь мы используем методы контроллера, чтобы обрабатывать каждый из запросов.

Шаг 5: Использование базы данных

Чаще всего при создании RESTful API используется база данных для сохранения и доступа к информации. Давайте добавим базу данных MySQL в наш проект.

Создайте новую базу данных MySQL и добавьте таблицу пользователей.

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Теперь добавим класс DB в наш проект, который будет использоваться для установки соединения с базой данных и выполнения запросов.

Создайте новый файл в папке lib и назовите его DB.php. Добавьте следующий код:

namespace App\Lib;

use PDO;

class DB
{
    private static $instance;
    private static $db;

    private function __construct()
    {
        $host = "localhost";
        $dbname = "restful_api";
        $username = "root";
        $password = "";
        self::$db = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    }

    public static function getInstance()
    {
        if (!self::$instance) {
            self::$instance = new DB();
        }
        return self::$instance;
    }

    public static function query($query)
    {
        return self::$db->query($query);
    }
}

Теперь мы можем использовать этот класс для выполнения запросов к базе данных.

В UsersControllers.php замените index метод на следующий:

public function index(Request $request, Response $response)
{
    $query = "SELECT * FROM users";
    $result = \App\Lib\DB::query($query)->fetchAll(PDO::FETCH_ASSOC);
    $response->getBody()->write(json_encode($result));
    return $response;
}

Здесь мы выполняем запрос SELECT на таблицу пользователей и возвращаем результат в качестве JSON.

Аналогично обновите остальные методы контроллера, используя соответствующие запросы для CRUD операций.

Шаг 6: Защита API ключом

Последний шаг - добавление аутентификации API. Есть много способов, чтобы обеспечить безопасность вашего Restful API, но простейшим способом является добавление API ключа.

Возможность использования ключа API означает, что только авторизованные клиенты могут получить доступ к вашему API. Самый простой способ сделать это - добавить ключ API в запрос.

Создайте новый файл в папке lib и назовите его Auth.php. Добавьте следующий код:

namespace App\Lib;

class Auth
{
    public static function isValid($apiKey)
    {
        $validKeys = ["abc123", "123abc", "qwerty"];
        return in_array($apiKey, $validKeys);
    }
}

Здесь мы предполагаем, что у нас есть несколько действительных ключей API. Поэтому мы проверяем, есть ли ключ api в массиве действительных ключей.

Откройте файл index.php и добавьте следующий код непосредственно перед $app->run():

$app->add(function ($request, $response, $next) {
    $apiKey = $request->getQueryParam('apiKey');
    if (!\App\Lib\Auth::isValid($apiKey)) {
        $response->getBody()->write("Unauthorized");
        return $response->withStatus(401);
    }
    $response = $next($request, $response);
    return $response;
});

Здесь мы добавляем middleware, который проверяет, является ли переданный ключ API действительным. Если ключ не является действительным, мы возвращаем статус 401 "Unauthorized".

Теперь мы можем протестировать наш Restful API с помощью Postman или другого инструмента для тестирования API.

Вот и все! Теперь вы знаете, как создать Restful API на PHP.

Редакция CMS.BY

Редакция CMS.BY

С нами Мир познавать проще и надёжнее

shape

У Вас остались вопросы? Обязательно обратитесь к нам
Мы проконсультируем Вас по любому вопросу в сфере IT

Оставить заявку