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

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

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

Начать курс

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

REST API (Representational State Transfer) — это архитектурный стиль для создания веб-сервисов, который сегодня используется практически в каждом современном приложении. Если вы хотите быстро научиться писать бэкенд на C#, то ASP.NET Core — лучший выбор для старта. В этой статье мы за 30 минут создадим полноценный REST API для управления списком задач (Todo List). Вы узнаете, как настроить проект, написать контроллеры, подключить базу данных и протестировать API через Swagger.

Готовы? Поехали!

Шаг 1: Создание проекта и настройка окружения

Первым делом нам понадобится установленный .NET SDK (версия 6.0 или новее). Скачать его можно с официального сайта Microsoft. После установки открываем терминал или командную строку и создаём новый проект:

dotnet new webapi -n TodoApi
cd TodoApi

Эта команда создаст шаблон веб-API с предустановленным Swagger. Откройте проект в Visual Studio Code или любой другой IDE. Структура проекта уже включает папки Controllers, Models и файл Program.cs.

Теперь добавим поддержку Entity Framework Core для работы с базой данных. Установим необходимые пакеты:

dotnet add package Microsoft.EntityFrameworkCore.InMemory
dotnet add package Microsoft.EntityFrameworkCore.Design

Мы используем InMemory-базу для простоты — данные будут храниться в оперативной памяти. Для продакшена вы можете заменить её на SQL Server или PostgreSQL.

Шаг 2: Создание модели данных и контекста БД

Создадим модель TodoItem. В папке Models создайте файл TodoItem.cs:

namespace TodoApi.Models;

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

Теперь создадим контекст базы данных. В папке 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; }
}

Зарегистрируем контекст в Program.cs:

using Microsoft.EntityFrameworkCore;
using TodoApi.Data;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<TodoContext>(opt =>
    opt.UseInMemoryDatabase("TodoList"));

builder.Services.AddControllers();
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();

Шаг 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(long id)
    {
        var todoItem = await _context.TodoItems.FindAsync(id);
        if (todoItem == null) return NotFound();
        return todoItem;
    }

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

    // PUT: api/TodoItems/5
    [HttpPut("{id}")]
    public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem)
    {
        if (id != todoItem.Id) return BadRequest();
        _context.Entry(todoItem).State = EntityState.Modified;
        await _context.SaveChangesAsync();
        return NoContent();
    }

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

Обратите внимание на атрибуты маршрутизации:

  • [Route("api/[controller]")] — задаёт базовый URL (api/TodoItems)
  • [HttpGet], [HttpPost], [HttpPut], [HttpDelete] — определяют HTTP-методы
  • async Task<ActionResult> — асинхронная обработка запросов

Шаг 4: Тестирование API через Swagger

Запустите проект:

dotnet run

После сборки в консоли появится ссылка вида https://localhost:5001. Откройте браузер и перейдите по адресу https://localhost:5001/swagger. Вы увидите интерфейс Swagger UI со всеми эндпоинтами нашего API.

Протестируем создание задачи:

  • Нажмите на POST /api/TodoItems
  • Нажмите "Try it out"
  • Введите JSON: { "title": "Изучить C#", "isComplete": false }
  • Нажмите "Execute" — в ответе получите созданный объект с ID

Теперь проверьте GET-запрос — вы увидите список задач. Можно также обновить задачу через PUT или удалить через DELETE. Всё работает!

Заключение: что дальше?

Поздравляю! Вы только что создали полноценный REST API на C# за 30 минут. Мы прошли все ключевые этапы: настройку проекта, модель данных, контекст БД

Блоги

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