Restful

发布时间 2023-12-14 21:31:44作者: 黑逍逍

RESTful(Representational State Transfer)是一种用于构建网络服务的架构风格。它是由 Roy Fielding 在他的博士论文中提出的,名为《Architectural Styles and the Design of Network-based Software Architectures》。RESTful 设计风格的目标是提供一种简洁、可伸缩、可维护的方式来设计和构建分布式系统。主要特点包括:

  1. 无状态性(Statelessness): RESTful 服务的每个请求都包含了所有必需的信息,而服务器的响应对于每个请求都是完全独立的,不依赖于之前的请求。这使得系统更加可伸缩和可靠。

  2. 资源(Resources): 在 RESTful 架构中,数据和功能被视为资源。每个资源都有一个唯一的标识符(通常是 URL),而客户端通过对这些资源的操作(如 GET、POST、PUT、DELETE 等)来实现与服务器的交互。

  3. 表现层状态转移(Representational State Transfer): 客户端通过资源的表现层(通常是 JSON 或 XML)来与服务器交互,而服务器则通过资源的表现层状态转移(REST)来处理客户端请求。这使得客户端和服务器之间的通信是无状态的,并且每个请求都包含了足够的信息来处理该请求。

  4. 统一接口(Uniform Interface): RESTful 架构具有一致性的统一接口,这使得客户端和服务器之间的交互变得简单且可预测。统一接口包括资源标识、资源操作的方式(如 GET、POST、PUT、DELETE 等)、资源的表现层。

RESTful 设计风格的主要目标是提供一种灵活、简洁的方式来设计分布式系统,使得系统更容易扩展、更易于理解和维护。它在构建 Web 服务、API 和其他分布式系统时得到了广泛的应用。RESTful 服务的设计使得客户端和服务器之间的通信更加简单、可伸缩,同时提供了一种统一的方式来定义和操作资源。

 

原始装饰器语法:

  • 使用 @app.route 装饰器来定义路由和视图函数的关系。
  • 装饰器的参数是路由的路径,可以包含动态参数,如 <int:variable>
  • 可以使用 methods 参数指定支持的 HTTP 方法。
  • 示例代码:
from flask import Flask

app = Flask(__name__)

@app.route('/hello', methods=['GET'])
def hello():
    return 'Hello, World!'

@app.route('/user/<int:user_id>', methods=['GET'])
def get_user(user_id):
    # 获取用户信息的代码
    return f'User ID: {user_id}'

  

Flask-RESTful:

  • 使用 Resource 类来定义资源,而不是直接使用视图函数。
  • 提供了更为结构化和面向资源的方式来构建 API。
  • 支持通过继承 Resource 类创建不同的资源,每个资源可以定义多个 HTTP 方法的处理函数(如 getpostputdelete)。
  • 示例代码:
from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'message': 'Hello, World!'}

class User(Resource):
    def get(self, user_id):
        # 获取用户信息的代码
        return {'user_id': user_id}

api.add_resource(HelloWorld, '/hello')
api.add_resource(User, '/user/<int:user_id>')