使用restful风格开发接口_基于SpringMVC 实现restful风格

背景:

网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"APIFirst"的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。

什么是 Restful

REST(Representational State Transfer)表述性状态转换,REST指的是一组架构约束条件和原则。 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。

引用 REST 创建者 Roy Fielding:
“REST 提供了一套架构约束,当应用作为整体时,其强调组件交互的可扩展性、接口的通用性、组件的独立部署以及中间组件,以减少交互延迟、实施安全性和封装传统系统。” — Roy Fielding,《架构风格与基于网络的软件架构设计》

基于SpringMVC 实现Restful

jsp页面:

<a href="${pageContext.request.contextPath }/queryFrui/${fruit.id}">查询</a>

Controller:
Spring mvc可以使用@RequestMapping的路径设置,结合@PathVariable的参数指定,来实现RESTful风格的请求。
样例要实现,通过拼接水果商品的id来实现一个RESTful风格的请求,并向后台发送该请求,以此来获取JSON格式的水果数据

@RequestMapping(value="/queryFruit/{id}",method={RequestMethod.GET})
@ResponseBody
public Fruits getFruitById(Model model,@PathVariable("id") Integer fruitId) throws Exception{
    Fruits fruit = fruitsServices.queryFruitById(fruitId);
    return fruit;
}

HTTP协议类型表达资源操作

HTTP协议里的8种方法,及其他衍生方法,常用的Get、post可以间接的实现其余所有的操作,根据框架和浏览器的兼容性选择性使用。

  1. GET(SELECT):从服务器取出资源(一项或多项),即是查询。
  1. POST(CREATE):在服务器新建一个资源,添加。

  2. PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

  3. PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

  4. DELETE(DELETE):从服务器删除资源

  5. HEAD:获取资源的元数据。

  6. OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

  7. TRACE:回显服务器收到的请求,主要用于测试或诊断。

  8. CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

  9. MOVE: 请求服务器将指定的页面移至另一个网络地址。

  10. COPY: 请求服务器将指定的页面拷贝至另一个网络地址。

  11. LINK: 请求服务器建立链接关系。

  12. UNLINK: 断开链接关系。

  13. WRAPPED: 允许客户端发送经过封装的请求。

  14. Extension-mothed:在不改动协议的前提下,可增加另外的方法。

返回结果应该包含状态码

  • 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

  • 201 CREATED -[POST/PUT/PATCH]:用户新建或修改数据成功。

  • 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

  • 204 NO CONTENT - [DELETE]:用户删除数据成功。

  • 400 INVALID REQUEST -[POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

  • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

  • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

  • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

  • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

  • 410Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

  • 422Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

  • 500INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

get Demo

@RequestMapping(value="/products",method= {RequestMethod.GET})
	public List<Product> products()
	{
		List<Product> products = new ArrayList<>();

		for (int i = 0; i < 6; i++) {
			Product p = new Product(i, "name" + i);
			products.add(p);
		}
		return products;
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code_mo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值