Как написать REST API на C# за 30 минут: пошаговое руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: REST API на C# — это просто

REST API (Representational State Transfer) — это архитектурный стиль, который позволяет клиентам и серверам обмениваться данными через HTTP. В современной веб-разработке API — это стандарт де-факто для создания бэкенда мобильных приложений, веб-сайтов и микросервисов. На платформе .NET (C#) разработка REST API максимально оптимизирована: вы можете получить работающий прототип буквально за полчаса, даже если вы новичок.

В этой статье мы создадим полноценный REST API для управления списком задач (ToDo List). Вы узнаете, как настроить проект ASP.NET Core Web API, создать модель данных, реализовать CRUD-операции (Create, Read, Update, Delete) и протестировать API через Swagger. Весь процесс займёт не более 30 минут.

1. Создание проекта и установка зависимостей

Первым делом откройте Visual Studio 2022 (или Visual Studio Code с установленным .NET SDK 6.0/7.0/8.0). Выполните следующие шаги:

  1. Выберите Создать новый проект → ASP.NET Core Web API.
  2. Назовите проект, например TodoApi.
  3. Убедитесь, что выбран фреймворк .NET 8.0 (или выше).
  4. Снимите галочку Use controllers, если хотите использовать минимальное API, но в этом руководстве мы будем использовать классические контроллеры — оставьте галочку.
  5. Нажмите Создать.

После создания проекта структура будет выглядеть так:

TodoApi/
├── Controllers/
├── Models/
├── Program.cs
└── appsettings.json

Установка дополнительных пакетов не требуется — все необходимые компоненты уже встроены в ASP.NET Core.

2. Создание модели данных и контекста базы данных

2.1. Модель TodoItem

Создайте папку Models и добавьте в неё класс TodoItem.cs:

namespace TodoApi.Models;

public class TodoItem
{
    public int Id { get; set; }
    public string? Title { get; set; }
    public bool IsComplete { get; set; }
}

Это минимальная модель: идентификатор, название задачи и флаг завершения.

2.2. Контекст базы данных

Теперь создадим контекст для Entity Framework Core. В папке Data (создайте её) добавьте класс TodoContext.cs:

using Microsoft.EntityFrameworkCore;
using TodoApi.Models;

namespace TodoApi.Data;

public class TodoContext : DbContext
{
    public TodoContext(DbContextOptions<TodoContext> options)
        : base(options)
    {
    }

    public DbSet<TodoItem> TodoItems { get; set; }
}

2.3. Настройка Program.cs

Откройте Program.cs и добавьте регистрацию контекста и Swagger:

using Microsoft.EntityFrameworkCore;
using TodoApi.Data;

var builder = WebApplication.CreateBuilder(args);

// Добавляем контроллеры
builder.Services.AddControllers();

// Регистрируем контекст БД (используем InMemory для простоты)
builder.Services.AddDbContext<TodoContext>(opt =>
    opt.UseInMemoryDatabase("TodoList"));

// Swagger
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

Обратите внимание: мы используем UseInMemoryDatabase — это удобно для прототипирования. В реальном проекте замените на SQL Server, PostgreSQL или другую БД.

3. Реализация контроллера с CRUD-операциями

Теперь самое главное — контроллер. Создайте в папке Controllers файл TodoItemsController.cs:

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TodoApi.Data;
using TodoApi.Models;

namespace TodoApi.Controllers;

[Route("api/[controller]")]
[ApiController]
public class TodoItemsController : ControllerBase
{
    private readonly TodoContext _context;

    public TodoItemsController(TodoContext context)
    {
        _context = context;
    }

    // GET: api/TodoItems
    [HttpGet]
    public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()
    {
        return await _context.TodoItems.ToListAsync();
    }

    // GET: api/TodoItems/5
    [HttpGet("{id}")]
    public async Task<ActionResult<TodoItem>> GetTodoItem(int id)
    {
        var item = await _context.TodoItems.FindAsync(id);
        if (item == null)
            return NotFound();
        return item;
    }

    // POST: api/TodoItems
    [HttpPost]
    public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem item)
    {
        _context.TodoItems.Add(item);
        await _context.SaveChangesAsync();
        return CreatedAtAction(nameof(GetTodoItem), new { id = item.Id }, item);
    }

    // PUT: api/TodoItems/5
    [HttpPut("{id}")]
    public async Task<IActionResult> PutTodoItem(int id, TodoItem item)
    {
        if (id != item.Id)
            return BadRequest();

        _context.Entry(item).State = EntityState.Modified;
        await _context.SaveChangesAsync();
        return NoContent();
    }

    // DELETE: api/TodoItems/5
    [HttpDelete("{id}")]
    public async Task<IActionResult> DeleteTodoItem(int id)
    {
        var item = await _context.TodoItems.FindAsync(id);
        if (item == null)
            return NotFound();

        _context.TodoItems.Remove(item);
        await _context.SaveChangesAsync();
        return NoContent();
    }
}

Что здесь происходит:

  • GET — получение всех задач или одной по ID.
  • POST — создание новой задачи. Возвращает HTTP 201 (Created) с ссылкой на созданный ресурс.
  • PUT — полное обновление задачи. Возвращает HTTP 204 (No Content).
  • DELETE — удаление задачи. Также возвращает 204.

Контроллер асинхронный — это стандарт для современных приложений.

4. Тестирование API через Swagger

Запустите проект (F5). Откроется браузер с интерфейсом Swagger (по адресу https://localhost:5001/swagger). Swagger автоматически генерирует документацию по ваш

Блоги

Рекомендаций по книгам