目录
RESTful设计要点
1.网址中不能有动词,只能有名词,且应使用复数。
例如:下面都是不符合RESTful风格的
2.get请求中参数一般都在url中
例如:
xxx.com/api/users 获取用户信息列表
xxx.com/api/users/t… 获取性别为男性且年龄为18岁的用户信息列表 多参数
xxx.com/api/users/1… 获取ID为1001的用户信息 单参数
下面这种写法则不符合RESTful风格
RESTful风格API示例
GET xxx.com/api/users //获取所有用户信息列表
GET xxx.com/api/users/1… //获取ID为1001的用户信息
PUT xxx.com/api/users/1… //修改ID为1001的用户信息
POST xxx.com/api/users //添加用户信息
DELETE xxx.com/api/users/1… //删除ID为1001的用户信息
那什么是GET,PUT,POST,DELETE呢
对于我一开始接触这几个词的时候,也是懵懵懂懂
一开始接触WebAPI,我属于后端开发,前端的什么js,请求等懂得少,看来还是要多了解
GET,PUT,POST,DELETE就是前端请求数据的几种方式,对应着RESTful API的增删改查
在网上查资料的时候,很多都是这么写,对于一个后端开发人员来说,还是不懂,下面容我一一讲解
前端请求数据时,有各种参数,其中有一个type参数,可以填写请求的方式
例如:
获取用户信息列表
$.ajax({
url: "/api/users/", //请求地址
type: "GET", //请求方式
data: {}, //参数
success: function (data) { //请求成功时,做什么
},
error: function (data) { //请求失败时,做什么
}
});
复制代码
修改用户信息
$.ajax({
url: "/api/users/1001", //请求地址
type: "PUT", //请求方式
data: {"ID": 1001, "name": "haha"}, //参数
success: function (data) { //请求成功时,做什么
},
error: function (data) { //请求失败时,做什么
}
});
复制代码
添加用户信息
$.ajax({
url: "/api/users", //请求地址
type: "POST", //请求方式
data: {"name": "haha"}, //参数
success: function (data) { //请求成功时,做什么
},
error: function (data) { //请求失败时,做什么
}
});
复制代码
删除用户信息
$.ajax({
url: "/api/users/1001", //请求地址
type: "DELETE", //请求方式
data: {}, //参数
success: function (data) { //请求成功时,做什么
},
error: function (data) { //请求失败时,做什么
}
});
复制代码
开始创建项目
看看微软提供的示例
方法分别是Get,Post,Put,Delete,分别对应增删改查
public class ValuesController : ApiController
{
// GET: api/Values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Values/5
public string Get(int id)
{
return "value";
}
// POST: api/Values
public void Post([FromBody]string value)
{
}
// PUT: api/Values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE: api/Values/5
public void Delete(int id)
{
}
}
复制代码
以Get,Post,Put,Delete为前缀命名的方法会自动识别,你可以在方法上添加**[HttpGet],[HttpPut],[HttpPost],[HttpDelete]特性**,
比如,

创建Help页面
我用VS2019创建的WebAPI项目已经包含Help页面,旧版本的没有,
看看这里的 Web API帮助页 ,并添加注释 帮助文档添加注释
路由
默认的路由都是,api/+{控制器名}/+参数,比如 :api/Values/5
我们也可以添加Route特性修改路由

效果

路由前缀
我们可以设置整个控制器的路由前缀,使用RoutePrefix特性

在使用路由前缀的情况下,也可以使用~符号对单个路由进行重写

效果

隐藏API
添加ApiExplorerSettings特性可以设置api不在Help页面上显示,同样的也可以添加到控制器上,隐藏控制器的所有API。

我试过了,虽然Help页面的API隐藏了,但是还是可以调用的
参数
多参数
比如:获取特定性别特定年龄的用户信息

获取性别为男性且年龄为18的用户列表地址为xxx.com/api/users/t…
参数约束
可以用来限制参数
比如,限制isMan为boo类型,限制age为int类型
[Route("{isMan:bool}/{age:int}")]
复制代码
约束

可选参数

一般用这种写法,这样在Help页面上有添加参数备注,默认值为18

或

默认年龄为18
api的多版本管理
是否一定使用RESTful风格设计
知乎上这文章,大家都有大家的意见
而我觉得,使用RESTful风格设计是一种规范,前后端的规范
如果要使用RESTful风格的就遵循它,不要使用一半不使用一半的
很多网友说当get请求参数很多时,就不能用RESTful了
而我觉得,当参数很多时,不可以拆分api吗,将一个api分为两个,并不是说获取的方法就只能一个,并且参数真的会那么多吗
看看,微软官方示例,比如

获取书的列表信息,可以分为多个api
是否使用RESTful风格设计一直以来都很受争议,本文也是代表个人观点,写的不好的请指出。谢谢
参考文章
理解RESTful架构
www.ruanyifeng.com/blog/2011/0…
RESTful设计指南
www.ruanyifeng.com/blog/2014/0…
微软官方Web API文档路由设置
docs.microsoft.com/zh-cn/aspne…





















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)
![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
