REST API в PHP

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

Одним из таких подходов является REST API. В его основе лежит идея, что для CRUD операций необходимо использовать различные методы протокола HTTP.

Для получения данных - метод GET, для создания данных - метод POST, для изменения данных - метод PUT, для удаления данных - метод DELETE.

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

Получаем всех юзеров:

urlGET http://api.loc/users/

Получаем одного юзера по его id:

urlGET http://api.loc/user/1/

Создаем юзера:

urlPOST http://api.loc/user/

Изменяем юзера по его id:

urlPUT http://api.loc/user/1/

Удаляем юзера по его id:

urlDELETE http://api.loc/user/1/

Давайте посмотрим, как REST API реализуется в PHP. Тут есть некоторая проблема. Дело в том, что и PHP, и CURL поддерживают только методы GET и POST:

api.loc/index.php<?php
  $method = $_SERVER['REQUEST_METHOD'];
  var_dump($method); // только GET и POST
?>

Поэтому для реализации REST API придется идти на хитрость. Ее суть заключается в том, что в реальности данные будут передаваться только методами GET и POST, но мы будем имитировать работу других методов с помощью кастомного HTTP заголовка. Назовем его, например, HTTP-X-HTTP-METHOD.

Toгда мы сможем получить содержимое этого заголовка следующим образом:

api.loc/index.php<?php
  $method = $_SERVER['HTTP-X-HTTP-METHOD'];
?>

Теперь мы можем написать реализацию API:

api.loc/index.php<?php
  $method = $_SERVER['HTTP-X-HTTP-METHOD'];
  
  switch ($method)  {
    case 'GET':
      // ...
    break;
    case 'POST':
      // ...
    break;
    case 'PUT':
      // ...
    break;
    case 'DELETE':
      // ...
    break;
  }
?>
Задание 1

Реализуйте REST API товаров интернет магазина.

Задание 2

Проверьте работу реализованного API с помощью библиотеки CURL.