告别繁琐!1分钟带你了解如何使用Minimal APIs快速构建增删改查应用接口!

🏆作者:科技、互联网行业优质创作者
🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!

Minimal API作为.NET 6的一个崭新特性,其核心理念在于极速构建与开发接口。

这些接口不仅适用于技术验证与探索,同样能够满足轻量且简洁的小应用需求。

简而言之,Minimal API为开发者提供了一种既高效又简便的接口开发能力,使得接口构建变得更加迅速与直观。

01

创建项目

写一个web请求简单接口最少需要几行代码?不严格计较的话,在.NET6下只需要4行代码。


var builder= WebApplication.CreateBuilder(args);
var app = builder1.Build();
app.MapGet("/", () => "Hello World!");
app.Run();

以上代码是在terminal中通过以下命令创建。

dotnet new web -o AAA-f net6.0

创建好后,VSCode打开的目录结构如下,Program.cs就是只有四行代码就能创建一个web请求的源文件。

图片

其中,app.MapGet("/", () => "Hello World")就是Minimal APIs,定义了请求的路由与路由对应的方法,在该项目配置下运行后,web浏览器输入https://localhost:7038后返回Hello World!。

图片

在此基础上,继续添加数据库操作与swagger接口文档,有了这两项才能算上是完整crud应用。

02

添加Swagger接口文档

在VSCode的Termanal进入AAA目录,添加Swagger文档的依赖。

dotnet add package Swashbuckle.AspNetCore --version 6.1.4

在四行代码上添加第1行代码、第6-15行代码和第20-24行代码进行Swagger配置。


using Microsoft.OpenApi.Models;


var builder= WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "Hello World",
        Description = "Minimal APIs",
        Version = "v1"
    });
});


var app = builder1.Build();

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Hello APIs v1");
});

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

​​​​​​​Dotnet run 运行后,浏览器请求:

http://localhost:5157/swagger/index.html

图片

03

创建数据库

这里使用 EFCore操作sqlite,继续在Terminal中添加依赖包。

dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 6.0dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0

新建Models与DB目录,Models存放的Pizza.cs与PizzaDB.cs文件,这两个文件将被EFCore用来创建sqlite数据库,DB存放数据库文件。

Pizza.cs:



namespace AAA.Models;

public class Pizza
{
    public int Id { get; set; }

    public string ? Name { get; set; }

    public string ? Description { get; set; }


}

​​​​​​​PizzaDB.cs


using Microsoft.EntityFrameworkCore;

namespace AAA.Models
{
    public class PizzaDB : DbContext
    {
        public PizzaDB(DbContextOptions options) : base(options)
        {

        }

        public DbSet<Pizza> Pizzas { get; set; } = null!;
    }
}

​​​​​​​在Program.cs添加使用sqlite的配置。


using Microsoft.OpenApi.Models;
using AAA.Models;

var builder= WebApplication.CreateBuilder(args);

builder.Services.AddSqlite<PizzaDB>("Data Source=DB\\Pizzas.db");

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "Hello World",
        Description = "Minimal APIs",
        Version = "v1"
    });
});


var app = builder1.Build();

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Hello APIs v1");
});

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

​​​​​​​首次使用需要安装EFCore的迁移工具,然后使用该工具依照Pizza.cs与PizzaDB.cs生成对应的数据库。

# 安装ef工具dotnet tool install --global dotnet-ef# 初始化数据库,生成Migrations目录dotnet ef migrations add InitialCreate# 生成数据库文件dotnet ef database update

运行后的目录详情:

图片

04

添加数据库操作

因为使用了EFCore,再加上Minimal APIs的神助,所以比较简单。


using AAA.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSqlite<PizzaDB>("Data Source=DB\\Pizzas.db");

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Title = "Hello World",
        Description = "Minimal APIs",
        Version = "v1"
    });
});

var app = builder.Build();

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Hello APIs v1");
});

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

app.MapGet("/pizzas/initial", async (PizzaDB db) =>
{
    await db.Pizzas.AddRangeAsync(new Pizza[]{
        new Pizza{Id=1,Name="Pizza1",Description="p1"},
        new Pizza{Id=2,Name="Pizza2",Description="p2"},
        new Pizza{Id=3,Name="Pizza3",Description="p3"},
        new Pizza{Id=4,Name="Pizza4",Description="p4"},
        new Pizza{Id=5,Name="Pizza5",Description="p5"}
    });
    await db.SaveChangesAsync();
    return Results.Ok();
});

app.MapGet("/pizzas", async (PizzaDB db) => await db.Pizzas.ToListAsync());

app.MapGet("/pizzas/{id}", async (PizzaDB db, int id) => await db.Pizzas.FindAsync(id));

app.MapPost("/pizzas", async (PizzaDB db, Pizza data) =>
{
    await db.Pizzas.AddAsync(data);
    await db.SaveChangesAsync();
    return Results.Created($"/pizza/{data.Id}", data);
});

app.MapPut("/pizza/{id}", async (PizzaDB db, Pizza data, int id) =>
{
    var pizza = await db.Pizzas.FindAsync(id);
    if (pizza is null) return Results.NotFound();
    pizza.Name = data.Name;
    pizza.Description = data.Description;
    await db.SaveChangesAsync();
    return Results.NoContent();

});

app.MapDelete("/pizza/{id}", async (PizzaDB db, int id) =>
{
    var pizza = await db.Pizzas.FindAsync(id);
    if (pizza is null) return Results.NotFound();
    db.Pizzas.Remove(pizza);
    await db.SaveChangesAsync();
    return Results.Ok();
});

app.Run();

​​​​​​​基本上就是Program.cs一个文件,100行代码内(去掉空行),就能实现一个简单的操作数据库的crud应用接口。

当我们需要快速验证某些功能的时候,简单操作下就能快速搭建好测试的框架来测试预想的功能需求,彻底突出了使用MInimal APIs能快速构建web应用的优点。

以下演示了运行/pizzas/initial接口初始化数据后,查询所有的示例:

图片

代码下载地址:

https://www.51aspx.com/code/TheCRUDInterface

另外,VSCode占用的内存较大,几乎同VS一样占内存,希望多做优化。

图片

🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你升职+涨薪!!
🏆点击下方卡片关注公众号,里面有很多大佬的技术文章,能助你快速成长。还可免费领取如下15个视频教程!

回复'面试',获取C#/.NET/.NET Core面试宝典

回复'C#',领取零基础学习C#编程

回复'NET',领取.NET零基础入门到实战

回复'Linux',领取Linux从入门到精通

回复'wpf',领取高薪热门【WPF上位机+工业互联网】从零手写实战

回复'Modbus',领取初识C#+上位机Modbus通信

回复'PLC',领取C#语言与西门子PLC的通信实操

回复'blazor',领取blazor从入门到实战

回复'TypeScript',领取前端热门TypeScript系统教程

回复'vue',领取vue前端从入门到精通

回复'23P',领取C#实现23种常见设计模式

回复'MongoDB',领取MongoDB实战

回复'Trans',领取分布式事务

回复'Lock',领取分布式锁实践

回复'Docker',领取微服务+Docker综合实战

回复'K8s',领取K8s部署微服务

回复'加群',进.NET技术社区交流群 

  • 17
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值