Изучение маршрутизации веб-API: подробное руководство с примерами кода

Маршрутизация веб-API играет решающую роль в разработке надежных и масштабируемых API. Это процесс сопоставления входящих HTTP-запросов с соответствующей конечной точкой или действием контроллера в вашем API. В этой статье блога мы рассмотрим различные методы реализации маршрутизации веб-API, а также приведем примеры кода, которые помогут вам понять и использовать этот важный аспект разработки API.

  1. Маршрутизация по атрибутам.
    Маршрутизация по атрибутам позволяет определять маршруты непосредственно на ваших контроллерах API или действиях с использованием атрибутов. Он обеспечивает более детальный контроль над маршрутизацией и часто предпочтителен в сценариях, где вы хотите иметь больший контроль над структурой URL-адресов или создавать сложные маршруты.

Пример:

[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet("{id}")]
    public IActionResult Get(int id)
    {
        // Code to retrieve user by id
        // ...
        return Ok(user);
    }
}
  1. Маршрутизация на основе соглашений.
    Маршрутизация на основе соглашений — это метод маршрутизации по умолчанию во многих веб-платформах. Он использует набор предопределенных соглашений для сопоставления входящих запросов с контроллерами и действиями на основе их имен и пространств имен. Этот метод проще реализовать и подходит для сценариев с простой структурой маршрутизации.

Пример:

public class UsersController : ControllerBase
{
    public IActionResult Get(int id)
    {
        // Code to retrieve user by id
        // ...
        return Ok(user);
    }
}
  1. Пользовательские ограничения маршрута.
    Иногда вам может потребоваться применить дополнительные ограничения к вашим маршрутам, например проверку параметров маршрута или ограничение маршрутов на основе определенных условий. Ограничения пользовательского маршрута позволяют вам определить собственную логику для проверки параметров маршрута и определения того, должен ли маршрут сопоставляться или нет.

Пример:

public class EvenNumberConstraint : IRouteConstraint
{
    public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
    {
        int id;
        if (int.TryParse(values[routeKey]?.ToString(), out id))
        {
            return id % 2 == 0;
        }
        return false;
    }
}
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet("{id:int:even}", Name = "GetUserById")]
    public IActionResult Get(int id)
    {
        // Code to retrieve user by id
        // ...
        return Ok(user);
    }
}
  1. Префиксы маршрутов.
    Префиксы маршрутов позволяют определить общий префикс для нескольких маршрутов внутри контроллера или группы контроллеров. Это помогает организовывать и группировать связанные маршруты в рамках общего сегмента URL.

Пример:

[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet]
    public IActionResult GetAll()
    {
        // Code to retrieve all users
        // ...
        return Ok(users);
    }
    [HttpGet("{id}")]
    public IActionResult Get(int id)
    {
        // Code to retrieve user by id
        // ...
        return Ok(user);
    }
}

Маршрутизация веб-API — это фундаментальный аспект создания эффективных и масштабируемых API. В этой статье мы рассмотрели различные методы реализации маршрутизации веб-API, включая маршрутизацию по атрибутам, маршрутизацию на основе соглашений, пользовательские ограничения маршрутов и префиксы маршрутов. Понимание и использование этих методов маршрутизации позволит вам создавать чистые и организованные конечные точки API. Используя правильный метод маршрутизации для вашего API, вы можете повысить удобство его обслуживания и обеспечить удобство работы для потребителей вашего API.