Restfull API 介绍 + 示例

什么是Restfull API?
它是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
资源:互联网所有的事物都可以被抽象为资源
资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。分别对应 添加、删除、修改、查询。
对比下:
传统方式操作资源:

http://127.0.0.1/item/queryUser.action?id=1   查询,GET 
http://127.0.0.1/item/saveUser.action             新增,POST 
http://127.0.0.1/item/.action          更新,POST 
http://127.0.0.1/item/deleteupdateUserUser.action?id=1  删除,GET或POST

使用RESTful操作资源:

【GET】 /users/1001 # 查看某个用户信息
【POST】 /users # 新建用户信息
【PUT】 /users/1001 # 更新用户信息(全部字段)
【DELETE】 /users/1001 # 删除用户信息

这样坐下对比,我们发现可以使用RESTful规范来定义请求资源的路径变得更为简洁明了。
规范定义为如下几点:
1.使用名词而不是动词
也就是不要再使用:

/getAllUsers
/createNewUser
/deleteAllUser

2.Get方法和查询参数不应该涉及状态改变
使用PUT, POST 和DELETE 方法 而不是 GET 方法来改变状态,不要使用GET 进行状态改变
3.使用复数名词
不要混淆名词单数和复数,为了保持简单,只对所有资源使用复数。

/cars 而不是 /car
/users 而不是 /user
/products 而不是 /product
/settings 而部署 /setting

4.使用子资源表达关系
如果一个资源与另外一个资源有关系,使用子资源:

GET /cars/711/drivers/ 返回 car 711的所有司机
GET /cars/711/drivers/4 返回 car 711的4号司机

5.使用Http头声明序列化格式
在客户端和服务端,双方都要知道通讯的格式,格式在HTTP-Header中指定
Content-Type 定义请求格式(我们通常用application/json)
Accept 定义系列可接受的响应格式


理解:

Restfull API 从字面就可以知道,他是rest式的接口,所以就要先了解什么是rest rest 不是一个技术,也不是一个协议
rest 指的是一组架构约束条件和原则,提供了一个新的架构设计思路,满足这些约束条件和原则的应用程序或设计就是 RESTful
在REST规则中,有两个基础概念:对象、行为 对象就是我们要操作的对象,例如添加用户的操作,那么对象就是user
行为有4种常用的:查看、创建、编辑、删除 rest的提出者很巧妙的利用http现有方法来对应这4种行为: GET - 查看 POST -
创建 PUT - 编辑 DELETE - 删除

为什么用Restfull API?

例如常用的MVC结构中,前后端的融合还是比较紧密的,用户访问一个网址,例如
http://test.com/a.php,请求先发送到动态php处理,php中处理逻辑,然后使用页面模板来输出显示给用户
以前用户主要就是用浏览器访问,这样的结构没什么问题,但现在移动客户端越来越重要,显然不能使用这个结构,需要为移动客户端开发接口
RESTful API 就可以通过一套统一的接口为所有客户端提供web服务,实现前后端分离
再比如在一个大型系统中,可能是多种开发语言一起工作,使用 RESTful API 就可以完全不关心开发语言,以标准的接口来协同工作

Restfull API是怎么定义的?
下面通过几个示例了解下Restfull API的定义方式
(1)查看所有任务

GET http://test.com/tasks

(2)新建一个任务

POST http://test.com/tasks
Data: title = Foobar

(3)根据ID查看一个任务

GET http://test.com/tasks/123

(4)更新任务

PUT http://test.com/tasks/123
Data: title = New 

(5)删除任务

DELETE http://test.com/tasks/123

可以看到Restfull API的风格非常简洁、统一、明确
例如查看操作,用普通方式的话,定义方式是任意的,如:

http://test.com/listall_tasks

‘listall_tasks’ 就是随意定义的,通过这个名字才可以看出是查看全部的意思,如果开发人员用了一个没有明确意义的名字,那就需要看文档或者代码才能知道含义了
而Restfull API 通过 GET 方法就知道是查看操作,通过tasks就知道查看的对象是什么

@Controller
@RequestMapping("/rest")
public class RestController {
    
//GET http://test.com/tasks   查看
@RequestMapping(value="/tasks/{id}",method=RequestMethod.GET)
public String get(@PathVariable("id") Integer id){
    System.out.println("get"+id);
    return "/hello";
}
    
//POST http://test.com/tasks  新增
//Data: user= user
@RequestMapping(value="/tasks ",method= RequestMethod.POST,produces="application/json;charset=UTF-8")
private String add(@RequestBody User user) {
    String result = "新增一个名为"+user.getUsername()+",密码为"+user.getPassword()+"的结果";
    return result;

    
//PUT http://test.com/tasks   编辑
//Data: user= user
@RequestMapping(value="/tasks",method= RequestMethod.PUT,produces="application/json;charset=UTF-8")
private String edit(@RequestBody User user) {
    String result = "修改一个名为"+user.getUsername()+",密码为"+user.getPassword()+"的结果";
    return result;
}

//DELETE http://test.com/tasks/123  删除
@RequestMapping(value="/tasks/{id}",method=RequestMethod.DELETE)
public String delete(@PathVariable("id") Integer id){
    System.out.println("delete"+id);
    return"/hello";
}
}

博文部分参考:
https://www.jianshu.com/p/b06d28456961
https://blog.csdn.net/qq_34582693/article/details/79981742

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值