# REST API в PHP

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

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

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

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

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

`GET http://api.loc/users/`

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

`GET http://api.loc/user/1/`

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

`POST http://api.loc/user/`

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

`PUT http://api.loc/user/1/`

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

`DELETE http://api.loc/user/1/`

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

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

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

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

`<?php $method = $_SERVER['HTTP-X-HTTP-METHOD']; ?>`

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

`<?php $method = $_SERVER['HTTP-X-HTTP-METHOD']; switch ($method) { case 'GET': // ... break; case 'POST': // ... break; case 'PUT': // ... break; case 'DELETE': // ... break; } ?>`

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

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

←→
↑