
零基礎入門 Alexa API 開發:環境配置、技能創建與示例講解
名稱如下:
選擇.Net6,如下:
創建好之后,運行項目,如下:
項目成功運行,如下:
之后,我們就可以開始使用RESTful了。
我們現在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 {
}
我們通過命令安裝該庫,并將其注入,如下:
Install-Package SqlsugarCore
builder.Services.AddSqlSugarSingleton(SqlSugar.DbType.MySql, builder.Configuration["mysql"]);
至此,SqlSugar就配置完成了。
數據庫名: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的操作(Create、Update、Read、Delete),而我們接下來就用 RESTful API 來實現這些功能。
我們可以通過 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必須是名詞而非動詞。
我們可以通過 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 來創建新的數據,.Net中可以使用 HttpDelete特性,代碼如下:
[HttpDelete("{id}")]
public IActionResult DeleteInfo([FromRoute] Guid id) {
mStudentService.DeleteStudentInfo(id);
return Ok("刪除成功!");
}
現在我們將數據刪除,如下:
我們再次查看所有數據,如下:
之所以將 更新操作放在最后,是因為這個操作會比前幾個操作繁瑣一些,這里的數據更新會分為兩類,如下:
我們可以通過 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 來更新數據,請加上所有使用的字段。
想要使用部分更新的操作,我們還需要安裝兩個庫,如下:
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