目录

RESTful设计要点

1.网址中不能有动词,只能有名词,且应使用复数。

2.get请求中参数一般都在url中

RESTful风格API示例

那什么是GET,PUT,POST,DELETE呢

开始创建项目

创建Help页面

路由

路由前缀

隐藏API

参数

多参数

参数约束

可选参数

api的多版本管理

是否一定使用RESTful风格设计

参考文章


RESTful设计要点

1.网址中不能有动词,只能有名词,且应使用复数。

例如:下面都是不符合RESTful风格

https://xxx.com/api/getusers

https://xxx.com/api/getuserbyid

https://xxx.com/api/updateuser

2.get请求中参数一般都在url中

例如:

https://xxx.com/api/users                       获取用户信息列表

https://xxx.com/api/users/true/18           获取性别为男性且年龄为18岁的用户信息列表   多参数

https://xxx.com/api/users/1001              获取ID为1001的用户信息                                   单参数

下面这种写法则不符合RESTful风格

https://xxx.com/api/users?isman=true&age=18

https://xxx.com/api/users?id=1001

 

RESTful风格API示例

GET https://xxx.com/api/users                         //获取所有用户信息列表

GET https://xxx.com/api/users/1001/details    //获取ID为1001的用户信息

PUT https://xxx.com/api/users/1001                //修改ID为1001的用户信息

POST https://xxx.com/api/users                      //添加用户信息

DELETE https://xxx.com/api/users/1001         //删除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的用户列表地址为https://xxx.com/api/users/true/18

参数约束

可以用来限制参数

比如,限制isMan为boo类型,限制age为int类型

[Route("{isMan:bool}/{age:int}")]

约束

 

可选参数

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

默认年龄为18

访问https://xxx.com/api/users/true/18https://xxx.com/api/users/true是一样的

 

api的多版本管理

符合RESTful风格的多版本管理设计方案

 

是否一定使用RESTful风格设计

知乎上这文章,大家都有大家的意见

https://www.zhihu.com/question/36706936

而我觉得,使用RESTful风格设计是一种规范,前后端的规范

如果要使用RESTful风格的就遵循它,不要使用一半不使用一半的

 

很多网友说当get请求参数很多时,就不能用RESTful了

而我觉得,当参数很多时,不可以拆分api吗,将一个api分为两个,并不是说获取的方法就只能一个,并且参数真的会那么多吗

 

看看,微软官方示例,比如

获取书的列表信息,可以分为多个api

 

是否使用RESTful风格设计一直以来都很受争议,本文也是代表个人观点,写的不好的请指出。谢谢

 


参考文章

理解RESTful架构

http://www.ruanyifeng.com/blog/2011/09/restful.html

RESTful设计指南

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

微软官方Web API文档路由设置

https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐