• [AI]Python中的Restful


    在当今数字化的时代,网络应用的开发变得越来越普遍,而RESTful(Representational State Transfer)作为一种设计风格和通信协议,为构建灵活、可扩展的网络应用提供了一种优雅的方式。本文将深入介绍RESTful的概念、原则以及它在现代应用开发中的重要性。

    1. RESTful的基本概念

    RESTful是一种基于HTTP协议的架构风格,它强调资源的表述性状态,以及通过对资源的标识、状态和操作的统一接口进行交互。关键的概念包括:

    • 资源(Resource):在RESTful中,一切皆为资源。资源可以是实体、服务、或者任何我们希望在网络中进行交互的事物。每个资源都有一个唯一的标识符(URI)。

    • 表述(Representation):资源的表述是对资源状态的一种呈现形式。可以是XML、JSON等格式。客户端通过操作表述来实现与服务器的交互。

    • 状态(State):资源的状态即表述的内容。通过状态,客户端和服务器之间进行信息交换。

    • 统一接口(Uniform Interface):RESTful的核心,提供了一组标准化的约束,包括资源标识、资源的表述、自描述消息和超媒体作为应用状态的引擎。

    2. RESTful的六大约束

    RESTful架构遵循一系列的约束,这些约束包括:

    • 客户端-服务器(Client-Server):将用户界面和数据存储分离,使得它们能够独立演化。

    • 无状态(Stateless):每个请求都包含足够的信息,服务器无需保存客户端的状态。这使得系统更容易扩展和可维护。

    • 可缓存(Cacheable):服务器的响应需要明确标识是否可缓存,以减少对服务器的请求,提高性能。

    • 分层系统(Layered System):通过分层的架构,可以实现更好的可伸缩性和简化架构。

    • 按需代码(Code on Demand):允许服务器向客户端传输可执行代码,以扩展客户端功能。

    • 统一接口(Uniform Interface):前文提到的统一接口是RESTful的基石,简化了架构,提高了可见性、可理解性和可扩展性。

    3. RESTful在应用开发中的应用

    API设计:RESTful风格常用于设计Web API,通过HTTP协议进行资源的增删改查操作,使得API简单易用。

    微服务架构:RESTful接口适合构建独立的微服务,每个服务通过HTTP进行通信,实现松耦合的系统。

    移动应用开发:RESTful接口对于移动应用开发非常友好,因为它使用轻量级的HTTP协议,适应移动网络环境。

    云服务:在云计算环境下,RESTful接口是构建分布式系统和云服务的理想选择。

    4. Restful & Python

    在Python中,可以使用一些库来轻松构建RESTful API,其中最常见的是Flask和Django Rest Framework。

    Flask中的RESTful

    安装Flask

    pip install Flask
    
    • 1

    示例代码
    python
    Copy code

    from flask import Flask, request
    from flask_restful import Resource, Api
    
    app = Flask(__name__)
    api = Api(app)
    
    # 示例资源类
    class HelloWorld(Resource):
        def get(self):
            return {'message': 'Hello, World!'}
    
    # 添加资源路由
    api.add_resource(HelloWorld, '/hello')
    
    if __name__ == '__main__':
        app.run(debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    上述代码创建了一个简单的Flask应用,并使用Flask-RESTful扩展创建了一个RESTful资源类 HelloWorld。这个资源类定义了一个GET方法,当访问/hello路径时,会返回JSON格式的{‘message’: ‘Hello, World!’}。

    运行该程序,访问http://127.0.0.1:5000/hello,将看到返回的JSON消息。

    在 Flask 中,可以通过 run 方法来指定应用运行的主机和端口。默认情况下,Flask 应用将在 localhost(127.0.0.1)的端口 5000 上运行。以下是如何指定端口的示例:

    from flask import Flask
    
    app = Flask(__name__)
    
    if __name__ == '__main__':
        # 通过 host 和 port 参数指定主机和端口
        app.run(host='0.0.0.0', port=8080)
    
    在上面的例子中,app.run() 方法接受 host 和 port 参数。host='0.0.0.0' 表示应用将监听所有公网可见的 IP 地址,而不仅仅是默认的 localhost。port=8080 则指定了应用运行的端口。
    
    
    ### Django Rest Framework中的RESTful
    
    安装Django Rest Framework
    ```bash
    pip install djangorestframework
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    示例代码

    # settings.py
    INSTALLED_APPS = [
        # ...
        'rest_framework',
    ]
    
    # serializers.py
    from rest_framework import serializers
    
    class HelloWorldSerializer(serializers.Serializer):
        message = serializers.CharField(max_length=255)
    
    # views.py
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework import status
    
    class HelloWorld(APIView):
        def get(self, request, format=None):
            data = {'message': 'Hello, World!'}
            serializer = HelloWorldSerializer(data)
            return Response(serializer.data, status=status.HTTP_200_OK)
    上述代码演示了如何在Django Rest Framework中创建一个RESTful API。使用了Django Rest Framework的APIView类,通过HelloWorldSerializer定义了返回数据的格式,GET请求将返回一个JSON格式的{'message': 'Hello, World!'}。
    
    在Django中的urls.py中添加路径映射,以便访问这个API。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    1706D1 - Chopping Carrots (Easy Version)
    java项目-第153期ssm超市进销存管理系统-ssm毕业设计-计算机毕业设计
    Java模糊查询批量删除Redis的Key实现
    git命令的操作
    函数指针+回调函数+点云鼠标点选和框选
    【Redis】实战篇:分布式锁解决集群环境下的并发问题
    vpp 中 load balance 的实现
    应用层协议——HTTP
    图像特征提取算法之Haar特征原理(一)
    10 Servlet
  • 原文地址:https://blog.csdn.net/weixin_43700866/article/details/134496059