Compartilhar via


Visão geral das APIs

Observação

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão do .NET 10 deste artigo.

Aviso

Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, consulte a Política de Suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.

ASP.NET Core fornece duas abordagens para criar APIs HTTP: APIs mínimas e APIs baseadas em controlador. Para novos projetos, é recomendável usar APIs mínimas, pois elas fornecem uma abordagem simplificada e de alto desempenho para criar APIs com o mínimo de código e configuração.

APIs mínimas são a abordagem recomendada para criar APIs HTTP rápidas com ASP.NET Core. Eles permitem que você crie pontos de extremidade totalmente funcionando REST com o mínimo de código e configuração. Ignore o scaffolding tradicional e evite controladores desnecessários declarando fluentemente rotas e ações de API.

Aqui está um exemplo simples que cria uma API na raiz do aplicativo Web:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

A maioria das APIs aceita parâmetros como parte da rota:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/users/{userId}/books/{bookId}", 
    (int userId, int bookId) => $"The user id is {userId} and book id is {bookId}");

app.Run();

ApIs mínimas dão suporte à configuração e personalização necessárias para dimensionar para várias APIs, lidar com rotas complexas, aplicar regras de autorização e controlar o conteúdo das respostas à API.

Introdução às APIs Mínimas

APIs baseadas em controlador - Abordagem alternativa

ASP.NET Core também dá suporte a uma abordagem baseada em controlador em que os controladores são classes que derivam de ControllerBase. Essa abordagem segue padrões tradicionais orientados a objetos e pode ser preferencial para:

  • Aplicativos grandes com lógica de negócios complexa
  • Equipes familiarizadas com o padrão MVC
  • Aplicativos que exigem recursos específicos do MVC

Aqui está o código de exemplo para uma API com base em controladores:


namespace APIWithControllers;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        builder.Services.AddControllers();
        var app = builder.Build();

        app.UseHttpsRedirection();

        app.MapControllers();

        app.Run();
    }
}
using Microsoft.AspNetCore.Mvc;

namespace APIWithControllers.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

O código a seguir fornece a mesma funcionalidade usando a abordagem de API mínima recomendada:


namespace MinimalAPI;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        var app = builder.Build();

        app.UseHttpsRedirection();

        var summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        app.MapGet("/weatherforecast", (HttpContext httpContext) =>
        {
            var forecast = Enumerable.Range(1, 5).Select(index =>
                new WeatherForecast
                {
                    Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                    TemperatureC = Random.Shared.Next(-20, 55),
                    Summary = summaries[Random.Shared.Next(summaries.Length)]
                })
                .ToArray();
            return forecast;
        });

        app.Run();
    }
}

Ambos os projetos de API referem-se à seguinte classe:

namespace APIWithControllers;

public class WeatherForecast
{
    public DateOnly Date { get; set; }

    public int TemperatureC { get; set; }

    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

    public string? Summary { get; set; }
}

Escolhendo entre abordagens

Comece com APIs mínimas para novos projetos. Eles oferecem:

  • Sintaxe mais simples – menos código clichê
  • Melhor desempenho – Sobrecarga reduzida em relação aos controladores
  • Teste mais fácil – teste simplificado de unidade e integração
  • Abordagem moderna – aproveita os recursos mais recentes do .NET

Considere AS APIs baseadas em controlador se você precisar:

A maioria desses recursos pode ser implementada em APIs mínimas com soluções personalizadas, mas os controladores os fornecem prontos para uso.

Confira também

ASP.NET Core fornece duas abordagens para criar APIs HTTP: APIs mínimas e APIs baseadas em controlador. Para novos projetos, é recomendável usar APIs mínimas, pois elas fornecem uma abordagem simplificada e de alto desempenho para criar APIs com o mínimo de código e configuração.

APIs mínimas são a abordagem recomendada para criar APIs HTTP rápidas com ASP.NET Core. Eles permitem que você crie pontos de extremidade totalmente funcionando REST com o mínimo de código e configuração.

Aqui está um exemplo simples:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

Introdução às APIs Mínimas

APIs baseadas em controlador - Abordagem alternativa

Controladores são classes que derivam de ControllerBase. Essa abordagem segue padrões tradicionais orientados a objetos.

Aqui está o código de exemplo para uma API com base em controladores:


namespace APIWithControllers;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        builder.Services.AddControllers();
        var app = builder.Build();

        app.UseHttpsRedirection();

        app.MapControllers();

        app.Run();
    }
}
using Microsoft.AspNetCore.Mvc;

namespace APIWithControllers.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

O código a seguir fornece a mesma funcionalidade usando a abordagem de API mínima recomendada:


namespace MinimalAPI;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        var app = builder.Build();

        app.UseHttpsRedirection();

        var summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        app.MapGet("/weatherforecast", (HttpContext httpContext) =>
        {
            var forecast = Enumerable.Range(1, 5).Select(index =>
                new WeatherForecast
                {
                    Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                    TemperatureC = Random.Shared.Next(-20, 55),
                    Summary = summaries[Random.Shared.Next(summaries.Length)]
                })
                .ToArray();
            return forecast;
        });

        app.Run();
    }
}

Ambos os projetos de API referem-se à seguinte classe:

namespace APIWithControllers;

public class WeatherForecast
{
    public DateOnly Date { get; set; }

    public int TemperatureC { get; set; }

    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

    public string? Summary { get; set; }
}

Escolhendo entre abordagens

Comece com APIs mínimas para novos projetos. Considere AS APIs baseadas em controlador se você precisar:

Confira também