使用 ASP.NET Core 6 立即构建 Web API
我多年来一直致力于构建基于 Web 的应用程序,总是遇到同样的问题,并且需要一遍又一遍地编写代码。在 90% 的交互中,我们如何将数据导入和导出数据库?简单的创建、读取、更新和删除操作……随着时间的推移,我们使用 NHibernate、Entity Framework 和 Dapper 等 ORM 工具简化了这些流程。下一个问题是,如何轻松地将这些数据导入到我们的应用程序中?我们希望创建一个可重复、易于遵循且快速集成的流程。
通常,人们会构建某种 API 来响应 Web 服务器的请求。太好了,现在我们必须在数据库上再写一层代码,并为所有我们刚刚通过 ORM 暴露给应用程序的数据生成记录。
输入最少的 API
在 ASP.NET Core 6 中,我们可以使用新的“最小 API”方法,显著简化与数据库交互的 API 的创建。我们的 API 代码可以在一个文件中交付,并引用连接到数据库的 Entity Framework 上下文。
考虑此配置将Contacts
表公开为可使用 HTTP GET 动词访问的 Web 端点:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqlite<MyContext>(
"Data Source=contacts.db"
);
var app = builder.Build();
app.MapGet("/api/Contacts", async (MyContext db) =>
await db.Contacts.ToArrayAsync()
);
app.MapGet("/api/Contacts/{id:int}", async (MyContext db, int id) => {
var contact = db.Contacts.FirstOrDefaultAsync(x => x.Id == id);
if (contact == null) return Results.NotFound();
return Results.Ok(contact);
});
app.Run();
仅仅为了生成 GET 和通过 id 获取 GET 操作,仍然需要大量的样板代码。我们还有 3 个方法需要编写,而且这些还只是针对第一个实体。
生成代码...一行即可完成
这让我开始思考,我想通过合理的默认值让构建过程更容易一些。我构建了一个简单的原型,只需一个 NuGet 包和一行代码就能生成所有 5 个默认的 HTTP 操作。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqlite<MyContext>(
"Data Source=contacts.db"
);
var app = builder.Build();
app.MapInstantAPIs<MyContext>();
app.Run();
现在我们开始讨论!这一条语句会生成以下 HTTP 端点:
- 得到
/api/Contact
- 得到
/api/Contact/{id}
- 邮政
/api/Contact
- 放
/api/Contact/{id}
- 删除
/api/Contact/{id}
我整理了一个演示来讨论这个库并展示它如何生成您可能手写相同的代码:
这仍然只是一个原型,但如果您想了解更多信息,请查看我们的GitHub 仓库,我们欢迎您在那里进行讨论和提交拉取请求。您甚至可以通过下载最新的 NuGet 包来亲自试用该库。
您是如何构建 Web API 的?您希望如何让它变得更简单、更可重复?
鏂囩珷鏉ユ簮锛�https://dev.to/dotnet/build-apis-for-the-web-instantly-with-aspnet-core-6-30lc