前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是RESTful风格的API设计?

什么是RESTful风格的API设计?

作者头像
程序新视界
发布2020-02-25 15:04:56
9860
发布2020-02-25 15:04:56
举报
文章被收录于专栏:丑胖侠丑胖侠

随着移动互联网的兴起,RESTful风格的API设计也随之流行起来,但我们说了那么多RESTful设计,它到底是什么?本篇文章带大家来了解一下它的真实面目。

RESTful概念

首先,我们需要明确的是RESTful,它是一个理念,是一个设计规范,而并不是什么协议等。

REST,全称Representational State Transfer,直接翻译就是:表现层状态转化。而该翻译之所以晦涩是因为缺少了主语,准确来说应该是“Resource Representational State Transfer”。

通俗来讲,就是“资源在网络中以某种表现形式进行状态转化”。

REST概念是Roy Thomas Fielding在他2000年的博士论文中提出的,他是HTTP协议(1.0版和1.1版)的主要设计者。

有了对RESTful基础概念的了解,我们分别来看看其相关概念的解释。

资源

“资源”是RESTful中最核心的概念之一。在RESTful概念中,互联网中的每一样信息都可以定义为资源,比如文本、图片、音频、视频等。而这些资源又都可以对应一个特定的URI(统一资源定位符),URI为每一个资源的地址或独一无二的识别符。

表现层

针对上面的“资源”,我们要进行相应的呈现,而且可以采用多种的呈现形式,而这些呈现形式就叫做“表现层”。

就拿文本为例,我们可以呈现为JSON格式、XML格式、HTML格式,甚至二进制格式等。这就是表现层所做的事情。

状态转化

资源通常放在服务器端,而客户端对服务器资源的增、删、改、查等操作,便涉及到资源状态的转化。这个过程便是“ 状态转化”。

我们以HTTP协议为例(RESTful不仅仅适用HTTP协议,只不过经常以HTTP协议为衬托),客户端可通过一些操作让服务器端的资源发生变化。

而这整个过程,便是“表现层状态转化”。

在HTTP中,提供了四种常见的操作方式:GET、POST、PUT、DELETE。

这四种操作方式分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

为什么要使用RESTful风格呢

这是因为RESTful风格的设计拥有以下特点:结构清晰、符合标准、易于理解、扩展方便。

试想一下,如果采用传统的JSP模式,页面内容和代码混合在一起,而此时项目功能需新增移动端、微信小程序等其他客户端,是否需要重新定义接口?

而采用RESTful的定义,不仅结构清晰,更重要的是易于扩展、适用性更广泛。

RESTful风格示例

以用户(User)的增删改查为例,我们可以设计出一下接口形式: 每列分别对应,(请求类型:请求地址:功能描述)

  • get : /user/list :获取所有用户信息
  • post:/user:创建用户信息
  • put:/user:更新用户信息
  • get:/user/1:获取资源标识(id)为1的用户信息
  • delete:/user/1:删除资源标识(id)为1的用户信息

看起来是不是简洁、清晰、方便很多?

如果再和SpringBoot结合起来,那就更加方便。下面展示部分通过SpringBoot来实现Controller层的代码。

代码语言:javascript
复制
@RestController
@RequestMapping("/user")
public class RestfulController {

	@Resource
	private UserService userService;

	/**
	 * 创建用户操作
	 */
	@PostMapping
	public User addUser(User user) {
		return userService.addUser(user);
	}

	/**
	 * 获取所需用户操作
	 */
	@GetMapping("/list")
	public List<User> listUser() {
		return userService.findAll();
	}

	/**
	 * 更新用户
	 */
	@PutMapping
	public User update(User user) {
		return userService.update(user);
	}

	/**
	 * 修改用户名
	 */
	@PatchMapping
	public User updateUsername(User user) {
		return userService.updateUsername(user);
	}

	/**
	 * 获取用户
	 */
	@GetMapping("{id}")
	public User get(@PathVariable("id") Long id) {
		return userService.findById(id);
	}

	/**
	 * 删除用户
	 */
	@DeleteMapping("{id}")
	public void delete(@PathVariable("id") Long id) {
		userService.delete(id);
	}
}

SpringBoot技术视频

超全Spring Boot 2.x视频教程:《Spring Boot 2.x 视频教程全家桶》


程序新视界 公众号“程序新视界”,一个让你软实力、硬技术同步提升的平台

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RESTful概念
  • 资源
  • 表现层
  • 状态转化
  • 为什么要使用RESTful风格呢
  • RESTful风格示例
  • SpringBoot技术视频
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档