Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое REST в ASP.NET?
REST (Representational State Transfer) — это архитектурный стиль для проектирования веб-APIs, основанный на HTTP протоколе. В ASP.NET REST реализуется через контроллеры и эндпоинты.
Основные принципы REST
- Ресурсы как существительные — /users, /products, не /getUsers
- HTTP методы для действий — GET (получить), POST (создать), PUT (обновить), DELETE (удалить)
- Stateless — каждый запрос содержит всю нужную информацию
- JSON представление — данные обмениваются в JSON формате
REST в ASP.NET — WebAPI контроллер
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
// GET: /api/users — получить всех пользователей
[HttpGet]
public IActionResult GetAll()
{
var users = new[] { new { Id = 1, Name = "Alice" } };
return Ok(users);
}
// GET: /api/users/1 — получить пользователя по ID
[HttpGet("{id}")]
public IActionResult GetById(int id)
{
return Ok(new { Id = id, Name = "Alice" });
}
// POST: /api/users — создать нового пользователя
[HttpPost]
public IActionResult Create([FromBody] CreateUserDto dto)
{
return CreatedAtAction(nameof(GetById), new { id = 1 }, new { Id = 1, Name = dto.Name });
}
// PUT: /api/users/1 — обновить пользователя
[HttpPut("{id}")]
public IActionResult Update(int id, [FromBody] UpdateUserDto dto)
{
return Ok(new { Id = id, Name = dto.Name });
}
// DELETE: /api/users/1 — удалить пользователя
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
return NoContent();
}
}
HTTP методы и статус коды
// GET — безопасный, идемпотентный (не изменяет состояние)
[HttpGet]
public IActionResult GetUsers() => Ok(_users);
// POST — создание нового ресурса
[HttpPost]
public IActionResult CreateUser([FromBody] UserDto dto)
{
var newUser = new User { Id = ++_lastId, ...dto };
return CreatedAtAction(nameof(GetUser), new { id = newUser.Id }, newUser);
// Возвращает 201 Created с Location header
}
// PUT — полное обновление (замена) ресурса
[HttpPut("{id}")]
public IActionResult UpdateUser(int id, [FromBody] UserDto dto)
{
var user = _users.Find(u => u.Id == id);
user.Name = dto.Name;
return Ok(user); // 200 OK
}
// PATCH — частичное обновление (если поддерживается)
[HttpPatch("{id}")]
public IActionResult PartialUpdate(int id, [FromBody] JsonPatchDocument<UserDto> patch)
{
// обновляем только переданные поля
return Ok();
}
// DELETE — удаление ресурса
[HttpDelete("{id}")]
public IActionResult DeleteUser(int id)
{
_users.Remove(_users.Find(u => u.Id == id));
return NoContent(); // 204 No Content
}
REST запросы
# GET (получить список)
GET /api/users
Response: 200 OK
{
[{ "id": 1, "name": "Alice" }, { "id": 2, "name": "Bob" }]
}
# GET (получить один)
GET /api/users/1
Response: 200 OK
{ "id": 1, "name": "Alice" }
# POST (создать)
POST /api/users
Body: { "name": "Charlie" }
Response: 201 Created
Location: /api/users/3
{ "id": 3, "name": "Charlie" }
# PUT (обновить)
PUT /api/users/1
Body: { "name": "Alexandra" }
Response: 200 OK
{ "id": 1, "name": "Alexandra" }
# DELETE (удалить)
DELETE /api/users/1
Response: 204 No Content
Routing в ASP.NET
[ApiController]
[Route("api/v1/[controller]")] // /api/v1/users
public class UsersController : ControllerBase
{
[HttpGet] // GET /api/v1/users
public IActionResult GetAll() { }
[HttpGet("{id}")] // GET /api/v1/users/1
public IActionResult GetById(int id) { }
[HttpPost] // POST /api/v1/users
public IActionResult Create([FromBody] UserDto dto) { }
}
Response DTO
public class UserDto
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
[HttpGet("{id}")]
public async Task<ActionResult<UserDto>> GetUser(int id)
{
var user = await _db.Users.FindAsync(id);
if (user == null)
return NotFound(); // 404
return Ok(new UserDto { Id = user.Id, Name = user.Name, Email = user.Email });
}
Async/Await в REST APIs
[HttpGet("{id}")]
public async Task<ActionResult<UserDto>> GetUserAsync(int id)
{
var user = await _db.Users.FirstOrDefaultAsync(u => u.Id == id);
return Ok(user);
}
Итог
REST в ASP.NET — это создание HTTP APIs с использованием стандартных методов (GET, POST, PUT, DELETE) и правильных HTTP статус кодов. Это делает API предсказуемым и удобным для фронтенда и других клиентов.