RestFul API

含状态传输(英文:Representational State Transfer,简称REST

目前三种主流的Web服务实现方案中
 

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTPURI,和XML以及HTML这些现有的广泛流行的协议和标准。

  • 资源是由URI来指定。
  • 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
  • 通过操作资源的表现形式来操作资源。
  • 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式
含状态传输的Web服务(Restful Web API)是一个使用Http并遵循Rest原则的Web服务。它从以下三个方面资源进行定义:
 
  • 直观简短的资源地址:URI,比如:http://example.com/resources/
  • 传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSONXML YAML 等。
  • 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

下表列出了在实现 含状态传输的 Web 服务时HTTP请求方法的典型用途。

HTTP 请求方法在RESTful Web 服务中的典型应用 [1]
资源GETPUTPOSTDELETE
一组资源的URI,比如http://example.com/resources/列出 URI,以及该资源组中每个资源的详细信息(后者可选)。使用给定的一组资源替换当前整组资源。在本组资源中创建/追加一个新的资源。 该操作往往返回新资源的URL。删除 整组资源。
单个资源的URI,比如http://example.com/resources/142获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等)替换/创建指定的资源。并将其追加到相应的资源组中。把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。删除 指定的元素。

REST的优点

  • 可更高效利用缓存来提高响应速度,通常Post方式是没有缓存机制的,因此不是查询数据的首选。
  • 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
  • 浏览器即可作为客户端,简化软件需求
  • 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
  • 不需要额外的资源发现机制
  • 在软件技术演进中的长期的兼容性更好

REST API 设计方面的最佳实践:

  1. 如何规划资源标识结构与 URI 模式
  2. 如何根据应用场景提供内容协商
  3. 如何正确的使用 HTTP 响应代码
  4. 如何处理缓存和并发请求
  5. 如何利用数据冗余和链接元素


参考资料:
RestAPI最佳实践:https://www.ibm.com/developerworks/cn/web/1103_chenyan_restapi/
Http Head Feild:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Http头中有Cache-control:http://www.cnblogs.com/yuyii/archive/2008/10/16/1312238.html
 

缓存控制:

缓存控制通常是需要客户端,缓存服务器 / 代理服务器与业务服务器一起发生作用。

HTTP 头中有“Cache-control”字段来控制如何使用缓存,常见的取值有 private、no-cache、max-age、must-revalidate 等。比如当你给返回的数据内容设置 max-age=600,那么当用户隔了 30 秒再次请求的时候,就不会导致重新请求后台数据。

另外,也可以通过“Expires”字段来指定内容过期时间,在此时间前的请求都不会导致后台程序重新请求数据。

下图展示了 max-age 是如何工作的。


图 2. 缓存控制工作方式的简单范例

图 2. 缓存控制工作方式的简单范例 
 

参考资料

### Restful API 使用指南与原理介绍 #### 什么是 RESTful API REST(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序。它基于 HTTP 协议,并通过标准的 HTTP 方法(如 GET、POST、PUT、DELETE 等)来操作资源[^2]。RESTful API 是符合 REST 原则的 Web API,通常使用 JSON 或 XML 格式传输数据。 #### RESTful API 的核心原则 1. **客户端-服务器分离**:客户端和服务器是独立的实体,通过 HTTP 协议进行通信。 2. **无状态性**:每个请求必须包含所有必要的信息,服务器不会保存客户端的状态。 3. **统一接口**:通过标准化的 URL 和 HTTP 方法访问资源。 4. **分层系统**:API 可以通过多个中间层(如缓存层、负载均衡层)进行扩展。 5. **可缓存性**:响应可以被标记为可缓存或不可缓存,从而提高性能[^2]。 #### RESTful API 的设计规范 - **资源标识**:使用名词作为资源名称,避免使用动词。例如,`/users` 表示用户集合资源。 - **HTTP 方法**:根据操作类型选择合适的 HTTP 方法: - `GET`:获取资源。 - `POST`:创建新资源。 - `PUT`:更新整个资源。 - `PATCH`:部分更新资源。 - `DELETE`:删除资源[^1]。 - **状态码**:返回适当的 HTTP 状态码以表明操作结果。例如: - `200 OK`:请求成功。 - `201 Created`:资源已创建。 - `400 Bad Request`:客户端请求有误。 - `404 Not Found`:资源未找到。 #### 使用 Flask 实现 RESTful API 示例 以下是一个使用 Flask 和 Flask-RESTful 创建简单 RESTful API 的示例: ```python from flask import Flask from flask_restful import Api, Resource app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): return {"message": "Hello, World!"}, 200 api.add_resource(HelloWorld, '/') if __name__ == '__main__': app.run(debug=True) ``` 上述代码定义了一个简单的 API 路由 `/`,当客户端发送 `GET` 请求时,返回 `"Hello, World!"`[^3]。 #### RESTful API 的实际案例 以 GitHub API 为例,其提供了丰富的 RESTful 接口供开发者使用。例如: - 获取当前用户信息:`GET https://api.github.com/user`[^4]。 - 创建新的授权:`POST https://api.github.com/authorizations`[^4]。 这些接口遵循 RESTful 设计原则,使用标准的 HTTP 方法和状态码。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值