REST (Representational State Transfer) — это архитектурный стиль для построения распределенных систем, прежде всего веб-сервисов. Это не протокол и не стандарт, а набор принципов и ограничений, которые делают API масштабируемыми, простыми в поддержке и независимыми от клиентских технологий.
Единообразие интерфейса (Uniform Interface)
Клиент-серверная архитектура
Отсутствие состояния (Stateless)
Кэширование (Cacheable)
Многоуровневая система (Layered System)
Код по требованию (Code on Demand)
GET - Получение ресурса
POST - Создание ресурса
PUT - Полное обновление ресурса
PATCH - Частичное обновление
DELETE - Удаление ресурса
HEAD - Получение метаданных
OPTIONS - Получение поддерживаемых методов
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet] // GET api/products
public IActionResult GetAll() { ... }
[HttpGet("{id}")] // GET api/products/5
public IActionResult GetById(int id) { ... }
[HttpPost] // POST api/products
public IActionResult Create([FromBody] Product product) { ... }
[HttpPut("{id}")] // PUT api/products/5
public IActionResult Update(int id, [FromBody] Product product) { ... }
[HttpDelete("{id}")] // DELETE api/products/5
public IActionResult Delete(int id) { ... }
}
Важная часть REST — использование соответствующих HTTP-статусов:
200 OK - Успешный запрос
201 Created - Ресурс создан
204 No Content - Успешно, но нет тела ответа
400 Bad Request - Неверный запрос
401 Unauthorized - Не авторизован
403 Forbidden - Доступ запрещен
404 Not Found - Ресурс не найден
500 Server Error - Ошибка сервера
/products
)/api/v1/products
)Пример ответа с HATEOAS:
{
"id": 1,
"name": "Product A",
"price": 99.99,
"_links": {
"self": { "href": "/products/1" },
"update": { "href": "/products/1", "method": "PUT" },
"delete": { "href": "/products/1", "method": "DELETE" }
}
}
REST — это архитектурный стиль для создания масштабируемых веб-сервисов, основанный на ресурсах, HTTP-методах и стандартных практиках. Правильно реализованное RESTful API интуитивно понятно, предсказуемо и легко интегрируется с различными клиентами.