2024年在线市场平台的11大最佳支付解决方案
.Net中如何创建RESTful API
RESTful 简介
RESTful 架构可以充分的利用 HTTP 协议的各种功能,是 HTTP 协议的最佳实践。
RESTful API 是一种软件架构风格、设计风格,可以让软件更加清晰,更简洁,更有层次,可维护性更好。
上面的话其实都是复制粘贴的。
而我目前所理解:RESTful API 就是一个无状态的一个数据接口,当我们使用某个接口时,服务器不会知道是谁调用了这个接口 。
.Net中使用RESTful
创建一个空白的Web应用
选择如下项目:
名称如下:
选择.Net6,如下:
创建好之后,运行项目,如下:
项目成功运行,如下:
之后,我们就可以开始使用RESTful了。
准备工作
注入Controller
我们现在Program
中注入Controller
,以便后续使用,如下:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();//添加
var app = builder.Build();
app.MapGet("/", () => "Hello,World");
app.MapControllers();//添加
app.Run();
使用控制器有3中方式,如下:
- 类名增加
Controller
为后缀 - 为类增加
[Controller]
特性 - 让类继承
Controller
类
我们目前使用的是第三种方式,内容如下:
[Route("api/infos")]
public class RESTfulDemo : ControllerBase {
}
安装SqlSugarCore
我们通过命令安装该库,并将其注入,如下:
Install-Package SqlsugarCore
builder.Services.AddSqlSugarSingleton(SqlSugar.DbType.MySql, builder.Configuration["mysql"]);
至此,SqlSugar就配置完成了。
创建MySQL数据库
数据库名:restful_demo
表名:tb_student_info
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `tb_student_info`;
CREATE TABLE `tb_student_info` (
`Guid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '学生ID',
`Name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '学生姓名',
`Gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '学生性别',
`Email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '邮箱',
`Address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`Guid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `tb_student_info` VALUES ('09f3ea03-cf5b-7e1b-2fef-58337232ba9f\r\n', 'Jack', '男', NULL, NULL);
INSERT INTO `tb_student_info` VALUES ('33720f4f-4864-8464-9151-c3c753377492\r\n', 'Mary', '女', NULL, NULL);
INSERT INTO `tb_student_info` VALUES ('8d3ad90c-bf53-5d1d-c8a7-5bf9d8b3e9d5\r\n', 'Lucy', '女', NULL, NULL);
INSERT INTO `tb_student_info` VALUES ('d9b64a12-b375-7ec8-85b5-0ee9cd5d9dcd\r\n', 'Tom', '男', '3534@qq.com', '祖安');
INSERT INTO `tb_student_info` VALUES ('e22d7b88-1b1d-0566-1a3f-ee6d76e4bcf1\r\n', 'Jrrey', '男', '123@qq.com', '亚德里大陆');
SET FOREIGN_KEY_CHECKS = 1;
至此,数据库就创建完成了。
简单的CURD操作
无论做什么项目,必然会有CURD的操作(Create、Update、Read、Delete),而我们接下来就用 RESTful API 来实现这些功能。
Read
我们可以通过 Get
请求来读取和查询数据,在.Net中我们可以使用HttpGet
特性,代码如下:
[HttpGet]
public IActionResult GetInfos() {
var datas = mStudentService.GetStudentInfos();
if (datas == null || datas.Count() == 0) {
return BadRequest(datas);
}
return Ok(datas);
}
之后,我们就可以通过 https://IP:端口/api/infos
获取所有的数据,如下:
需要注意的是我们这里获取所有信息用的是 infos
而非 getInfos
,是因为我们遵守了RESTful API
的规范,URL必须是名词而非动词。
Create
我们可以通过 Post
来创建新的数据,.Net中可以使用 HttpPost
特性,代码如下:
[HttpPost]
public IActionResult CreateInfo([FromBody] StudentInfoDto studentInfoDto) {
StudentInfo info = new StudentInfo();
var guid = Guid.NewGuid().ToString();
info.Guid = guid;
info.Name = studentInfoDto.Name;
info.Gender = studentInfoDto.Gender;
info.Email = studentInfoDto.Email;
info.Address = studentInfoDto.Address;
mStudentService.AddStudentInfo(info);
return Ok(studentInfoDto);
}
之后,我们就可以创建一个新的数据了,如下:
此时,数据就已经新建成功了,我们查询所有数据,如下:
Delete
我们可以通过 Delete 来创建新的数据,.Net中可以使用 HttpDelete特性,代码如下:
[HttpDelete("{id}")]
public IActionResult DeleteInfo([FromRoute] Guid id) {
mStudentService.DeleteStudentInfo(id);
return Ok("删除成功!");
}
现在我们将数据删除,如下:
我们再次查看所有数据,如下:
Update
之所以将 更新操作放在最后,是因为这个操作会比前几个操作繁琐一些,这里的数据更新会分为两类,如下:
- 数据全部更新
- 数据部分更新
数据全部更新(Put)
我们可以通过 Put 来进行更新全部的数据,.Net中可以使用 HttpPut 特性,如果在使用 Put 时,省略了一些字段,那么这些字段的是数据将会被删除,代码如下:
[HttpPut("{id}")]
public IActionResult UpdateInfo(
[FromRoute] Guid id,
[FromBody] StudentInfoDto studentInfoDto
) {
var infoToRoute = mStudentService.GetStudentInfoById(id);
if (infoToRoute == null) {
return BadRequest("当前ID不存在!");
}
return Ok(studentInfoDto);
}
现在我们只想将名称改为大写,因为我们没有设置值,后两项的数据已经为空了,如下:
所以说,如果需要使用 Put 来更新数据,请加上所有使用的字段。
数据部分更新(Patch)
想要使用部分更新的操作,我们还需要安装两个库,如下:
Install-Package Microsoft.AspNetCore.JsonPatch
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
之后,我们需要先更改注入,如下:
builder.Services.AddControllers().AddNewtonsoftJson();
我们可以通过 Patch 来进行更新全部的数据,.Net中可以使用 HttpPatch特性,代码如下:
[HttpPatch("{id}")]
public IActionResult PartiallyUpdateInfo(
[FromRoute] Guid id,
[FromBody] JsonPatchDocument<StudentInfoDto> patchDocument
) {
var infoToRoute = mStudentService.GetStudentInfoById(id);
if (infoToRoute == null) {
return BadRequest("当前ID不存在!");
}
StudentInfoDto infoDto = new StudentInfoDto() {
Email = infoToRoute.Email,
Address = infoToRoute.Address,
Gender = infoToRoute.Gender,
Name = infoToRoute.Name
};
//将传入的数据应用到infoDto上
patchDocument.ApplyTo(infoDto,ModelState);
if (!TryValidateModel(infoDto)) {
return ValidationProblem(ModelState);
}
return Ok(infoDto);
}
而现在,我们将名称更改为大写,数据就实现了部分更新,如下:
需要注意的是,当我们执行部分更新是,需要用到如下的格式:
[
{
"op":"replace",
"path":"/name",
"value":"UNITYSIR"
}
]
目前这个格式在这里不做过多的说明,如果需要了解更多,请到官网查看 (https://jsonpatch.com/)到这里,这个基本的CRUD的操作就已经结束了。
文章转自微信公众号@UnitySir