RESTful架构总结

RESTful架构(Representational State Transfer)

 

RESTful三要素

 

1. 资源(Resources)

REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。

所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。所谓"上网",就是与互联网上一系列的"资源"互动,调用它的URI。

 

2.表现层(Representation)

"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范 畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段 才是对"表现层"的描述。

 

3.状态转化(State Transfer)

访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

 

什么是RESTful架构:

  (1)每一个URI代表一种资源;

  (2)客户端和服务器之间,传递这种资源的某种表现层;

  (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

 

RESTful误区:

      (1)URI包含动词。因为"资源"表示一种实体,所以应该是名词,URI不应该有动词

      (2)URL包含版本。同一种资源的不同表现形式,应该采用同一个URL。版本号可以在HTTP请求头信息的 Accpet字段进行区分

 

 

附件是 xstream + spring MVC 实现的Rest的WebService 示例

### RESTful架构的核心概念 RESTful架构是一种基于REST(Representational State Transfer,表述性状态转移)原则的架构风格。其核心目标是为网络应用提供一种轻量级、易于扩展的设计模式[^1]。这种架构风格特别适用于分布式系统和大规模互联网环境下的超媒体系统的开发。 #### RESTful架构的关键特性 RESTful架构具有以下几个关键特性: - **资源导向**:所有的操作都围绕着资源展开,而这些资源由唯一的URI(Uniform Resource Identifier,统一资源标识符)来表示[^1]。 - **无状态通信**:客户端与服务器之间的每一次交互都是独立的,不依赖于之前的任何请求或响应[^1]。 - **统一接口**:通过标准化的操作集(GET, POST, PUT, DELETE等),使得客户端可以一致地访问不同的资源[^3]。 #### RESTful架构的设计原则 RESTful架构遵循一组严格的设计原则,以确保系统的可伸缩性和互操作性: 1. **资源识别**:每个资源都有一个唯一标识符(通常是URL)。例如,`/users/{id}` 可以用来获取特定用户的详细信息[^1]。 2. **标准方法**:使用HTTP动词定义对资源的操作行为。常见的HTTP动词及其含义如下: - `GET`: 获取资源数据。 - `POST`: 创建新资源。 - `PUT`: 更新现有资源或创建指定位置的新资源。 - `DELETE`: 删除资源。 这些动词提供了清晰的标准接口,便于不同服务间的协作[^3]。 3. **自描述消息**:每条消息都应该包含足够的信息让接收方能够理解该消息的内容及处理方式。这通常意味着在HTTP头中加入MIME类型和其他元数据[^2]。 4. **按需链接**:利用HATEOAS (Hypermedia As The Engine Of Application State),即通过返回的数据中的链接引导下一步动作,增强用户体验的同时简化了API文档编写工作流程[^3]。 #### RESTful架构的实现方式 为了有效地实现RESTful API,在技术选型方面可以选择多种编程语言和技术栈支持的服务端框架。对于Java开发者而言,《RESTful API设计与实现:Java开发者指南》一书中提到过一些最佳实践建议[^4]。下面是一个简单的例子展示如何用Spring Boot快速搭建一个基本的RESTful服务: ```java @RestController @RequestMapping("/api/users") public class UserController { @GetMapping("/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id){ User user = userService.findById(id); if(user != null){ return new ResponseEntity<>(user, HttpStatus.OK); }else{ return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } @PostMapping("/") public ResponseEntity<Void> createUser(@RequestBody User newUser){ boolean created = userService.create(newUser); if(created){ URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(newUser.getId()).toUri(); return ResponseEntity.created(location).build(); }else{ return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } } } ``` 此代码片段展示了两个典型的RESTful API端点——一个是读取单个用户的信息(`GET /api/users/{id}`),另一个则是新增加一个新的用户记录(`POST /api/users`)。 ### 总结 综上所述,RESTful架构不仅是一套理论上的指导方针,更是在实际工程实践中被广泛采用的一种解决方案。它凭借简单直观的设计理念以及强大的功能表现赢得了众多开发者的青睐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值