網(wǎng)站首頁 編程語言 正文
一、前言
RESTful API 是基于HTTP協(xié)議產(chǎn)生的一種相對簡單的API設(shè)計(jì)方案;
RESTful 的核心是 everything is a “resource”,所有的HTTP action,都應(yīng)該是相應(yīng)resource上可以被操作和處理的,而API 就是對資源的管理操作,而這個(gè)具體操作是由 HTTP action 指定的。
使用HTTP的GET、POST、DELETE、PUT來表示對于資源的增刪改查。
- GET:讀取(Read)
- POST:新建(Create)
- PUT:更新(Update)
- DELETE:刪除(Delete)
學(xué)習(xí)資料準(zhǔn)備:
(1)用于測試的實(shí)體類:
public class Student
{
public string StuNo { get; set; } //學(xué)號
public string StuName { get; set; } //姓名
public string StuSex { get; set; } //性別
}
(2)模擬的測試數(shù)據(jù)(編寫在webapi類的構(gòu)造函數(shù)中):
public static List<Student> StuList { get; set; }
public ServerController()
{
StuList = new List<Student>();
StuList.Add(new Student { StuNo = "001", StuName = "孫悟空", StuSex = "男" });
StuList.Add(new Student { StuNo = "002", StuName = "豬八戒", StuSex = "男" });
StuList.Add(new Student { StuNo = "003", StuName = "白骨精", StuSex = "女" });
}
二、獲取所有數(shù)據(jù)
API接口:
[HttpGet]
public List<Student> GetList([FromBody]dynamic obj)
{
return StuList;
}
三、獲取詳情
API接口:
[HttpGet]
public Student GetDetail(string id)
{
Student stu = StuList.SingleOrDefault(p => p.StuNo.Equals(id));
return stu;
}
四、新增數(shù)據(jù)
API接口:
[HttpPost]
public IHttpActionResult Add([FromBody] Student stu)
{
StuList.Add(stu);
return Json(new { msg = "添加成功!",data=StuList });
}
五、修改數(shù)據(jù)
API接口:
[HttpPut]
public IHttpActionResult Update(string id, [FromBody] Student stu)
{
Student model = StuList.SingleOrDefault(p => p.StuNo.Equals(id));
if (model == null)
return Json(new { msg = "修改的數(shù)據(jù)不存在!" });
model.StuNo = stu.StuNo;
model.StuName = stu.StuName;
model.StuSex = stu.StuSex;
return Json(new { msg = "修改成功!", data = model });
}
六、刪除數(shù)據(jù)
API接口:
[HttpDelete]
public IHttpActionResult Delete(string id)
{
Student model = StuList.SingleOrDefault(p => p.StuNo.Equals(id));
if (model == null)
return Json(new { msg = "刪除的數(shù)據(jù)不存在!" });
StuList.Remove(model);
return Json(new { msg = "刪除成功!", data = StuList });
}
七、特性路由
(1) 基本路由映射
API接口:
[HttpGet]
[Route("api/Route/Basic")]
public IHttpActionResult GetBasic()
{
return Json(new { msg = "測試基本的特性路由!" });
}
接口訪問地址:
http://localhost:60650/api/Route/Basic
(2) 路由映射參數(shù)
API接口:
[HttpGet]
[Route("api/Route/Param/{id}/{name}")]
public IHttpActionResult Get2(string id,string name)
{
return Json(new { msg = "測試路由映射參數(shù)!",data = new { id= id,name=name } });
}
接口訪問地址:
http://localhost:60650/api/Route/Param/001/孫悟空
(3) 多重特性路由
API接口:
[HttpGet]
[Route("api/Route/Multiple1/{id}/{name}")]
[Route("api/Route/Multiple2/{id}/{name}")]
public IHttpActionResult Get3(string id,string name)
{
return Json(new { msg = "測試多重特性路由!",data = new { id= id,name=name } });
}
接口訪問地址:
http://localhost:60650/api/Route/Multiple1/001/孫悟空
或
http://localhost:60650/api/Route/Multiple2/001/孫悟空
(4) 缺省參數(shù)路由
API接口:
[HttpGet]
[Route("api/Route/Default/{id}/{name?}")]
public IHttpActionResult Get4(string id, string name="孫悟空")
{
return Json(new { msg = "測試缺省參數(shù)路由!", data = new { id = id, name = name } });
}
或
[HttpGet]
[Route("api/Route/Default/{id}/{name=孫悟空}")]
public IHttpActionResult Get4(string id, string name)
{
return Json(new { msg = "測試缺省參數(shù)路由!", data = new { id = id, name = name } });
}
接口訪問地址:
http://localhost:60650/api/Route/Default/001
(5) 參數(shù)約束路由
ASP.NET Web API內(nèi)置約束有下面這些:
{x:alpha} 約束大小寫英文字母
{x:bool}
{x:datetime}
{x:decimal}
{x:double}
{x:float}
{x:guid}
{x:int}
{x:length(6)}
{x:length(1,20)} 約束長度范圍
{x:long}
{x:maxlength(10)}
{x:min(10)}
{x:range(10,50)} //約束值的范圍
{x:regex(正則表達(dá)式)}
可以設(shè)置多個(gè)約束:
[Route("api/Route/orders/{id:int:min(1)}")]
API接口:
[HttpGet]
[Route("api/Route/Check/{id:range(1,100)}/{name}")]
public IHttpActionResult Get5(int id, string name)
{
return Json(new { msg = "測試參數(shù)約束路由!", data = new { id = id, name = name } });
}
接口訪問地址:(以下地址可以正常訪問接口)
http://localhost:60650/api/Route/Check/11/孫悟空
接口訪問地址:(以下地址無法訪問接口)
http://localhost:60650/api/Route/Check/101/孫悟空
(6) 通配符(*)路由變量
API接口:
[HttpGet]
[Route("api/Route/Date/{id:range(1,100)}/{name}/{*birthday}")]
public IHttpActionResult Get6(int id, string name,DateTime birthday)
{
return Json(new { msg = "*使用!", data = new { id = id, name = name,birthday = birthday.ToString("yyyy年MM月dd日") } });
}
接口訪問地址:
http://localhost:60650/api/Route/Date/1/jack/1988-8-8
接口訪問地址:(此地址如果在路由中沒有*則無法訪問,因?yàn)槌绦驎?huì)認(rèn)為“1988/8/8”是三個(gè)參數(shù),而不是一個(gè)參數(shù))
http://localhost:60650/api/Route/Date/1/jack/1988/8/8
(7) 路由映射復(fù)雜參數(shù)
給實(shí)體類添加特性使其支持綁定:
[ModelBinder]
public class Student
{
public string StuNo { get; set; } //學(xué)號
public string StuName { get; set; } //姓名
public string StuSex { get; set; } //性別
}
方案一API接口:
[HttpGet]
[Route("api/Route/Class/{stu.StuNo}/{stu.StuName}/{stu.StuSex}")]
public IHttpActionResult Get7(Student stu)
{
return Json(new { msg = "路由映射復(fù)雜參數(shù)!", data = stu });
}
方案一接口訪問地址:
http://localhost:60650/api/Route/Class/001/jack/man
方案二API接口:
[HttpGet]
[Route("api/Route/Class")]
public IHttpActionResult Get7(Student stu)
{
return Json(new { msg = "路由映射復(fù)雜參數(shù)!", data = stu });
}
方案二接口訪問地址:
http://localhost:60650/api/Route/Class?stu.StuNo=001&stu.StuName=jack&stu.StuSex=man
(8) 路由前綴
在控制器類上定義路由前綴:
[RoutePrefix("api/Prefix")]
public class PrefixController : ApiController
{
}
路由前綴API接口:
[Route("Basic")]
public IHttpActionResult Get1()
{
return Json(new { msg = "測試路由前綴!" });
}
接口訪問地址:
http://localhost:60650/api/Prefix/Basic
取消路由前綴API接口:
[Route("~/api/Cancel/Basic")] //通過~/取消路由前綴
public IHttpActionResult Get2()
{
return Json(new { msg = "取消路由前綴!" });
}
接口訪問地址:
http://localhost:60650/api/Cancel/Basic
原文鏈接:https://www.cnblogs.com/wml-it/p/15623167.html
相關(guān)推薦
- 2022-07-15 Android自定義Camera實(shí)現(xiàn)拍照小功能_Android
- 2022-03-10 使.NET6在開發(fā)時(shí)支持IIS_基礎(chǔ)應(yīng)用
- 2023-01-07 利用Linux?Find命令快速查找文件方法_linux shell
- 2022-08-01 flask上使用websocket的方法示例_python
- 2022-02-27 一個(gè)多模塊的Spring Boot項(xiàng)目打成多個(gè)jar包在服務(wù)器上運(yùn)行
- 2022-09-23 Android?創(chuàng)建AIDL文件使用教程_Android
- 2022-11-07 Python實(shí)現(xiàn)簡易凱撒密碼的示例代碼_python
- 2022-08-04 深入理解pytorch庫的dockerfile_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支