Maison  >  Article  >  développement back-end  >  Comment utiliser Python Flask RESTful

Comment utiliser Python Flask RESTful

王林
王林avant
2023-04-29 19:49:121552parcourir

1. Présentation du style RESTful

REST (Representational State Transfer) est un style de conception d'applications Web orienté ressources qui suit certains principes de conception pour que les applications Web aient une bonne lisibilité, évolutivité et maintenabilité. Expliquons chaque aspect du style RESTful en détail :

  • Resource Identifier : Dans le style RESTful, chaque ressource possède un identifiant unique, généralement un URL (Uniform Resource Locator) . Une URL est utilisée pour identifier l'emplacement d'une ressource afin que les clients puissent y accéder à l'aide du protocole HTTP. Par exemple, une URL simple peut être : http://example.com/products/123, où "products" représente le type de ressource et "123" représente l'identifiant de la ressource. <code>URL(Uniform Resource Locator)。URL 用于标识资源的位置,使得客户端可以使用 HTTP 协议进行访问。例如,一个简单的 URL 可以是:http://example.com/products/123,其中“products”表示资源类型,“123”表示资源标识符。

  • 表示层:资源可以以不同的格式表示,例如 JSONXMLHTML 等。客户端可以根据需要选择适当的表示形式进行交互。例如,一个 RESTful API 可以返回 JSON 格式的数据,以便客户端可以更容易地解析和处理数据。

  • 自描述消息:每个消息都应该包含足够的信息,以描述如何处理该消息。例如,HTTP 响应应该包含状态码、响应头和响应正文等信息,以便客户端可以理解响应的含义。

  • 无状态通信RESTful 风格的设计强调无状态通信,这意味着每个请求都应该包含所有必要的信息以处理该请求,而不依赖于先前的请求。这可以使得 Web 应用程序更加简单和可扩展,因为服务器不需要保留任何状态信息。

  • 统一接口:所有资源应该通过相同的接口来访问。这意味着客户端可以使用相同的 HTTP 方法(如 GETPOSTPUTDELETE 等)来操作不同类型的资源。这使得 API 更加简单和一致,并且更容易被其他开发者理解和使用。

总之,RESTful 风格的设计使得 Web 应用程序更加灵活、可扩展和易于维护,是一种现代化的 Web 应用程序设计方式。

二、Python 中的 RESTful

Python 可以用于实现 RESTful 风格的 Web 应用程序,通常使用一些 Web 框架来简化开发过程。下面是一些常见的 Python Web 框架:

  • FlaskFlask 是一个简单、轻量级的 Web 框架,可以用来构建 RESTful 风格的 Web 应用程序。它使用 Python 的装饰器语法来定义 HTTP 路由,使得编写 Web 应用程序变得简单和直观。Flask 还提供了扩展机制,使得开发人员可以轻松地添加新的功能,例如数据库访问、表单验证等。

  • DjangoDjango 是一个功能强大、全面的 Web 框架,可以用于构建复杂的 Web 应用程序。它提供了许多内置功能,例如 ORM(对象关系映射)、表单验证、身份验证等,可以使开发人员更快地构建 Web 应用程序。Django 也支持 RESTful 风格的 Web 应用程序开发,可以使用第三方库 Django REST framework 来实现。

  • BottleBottle 是一个轻量级的 Web 框架,它使用 Python 的装饰器语法来定义 HTTP 路由,可以快速构建 RESTful 风格的 Web 应用程序。Bottle 还包含了一些有用的功能,例如模板引擎、数据库访问、静态文件处理等。

  • PyramidPyramid 是一个灵活、高度可定制的 Web 框架,可以用于构建各种类型的 Web 应用程序,包括 RESTful 风格的 Web 应用程序。Pyramid 提供了许多扩展机制,使得开发人员可以轻松地添加新的功能,例如数据库访问、表单验证、身份验证等。

以上框架都支持 RESTful 风格的 Web 应用程序开发,并且都具有各自的优缺点,开发人员可以根据自己的需求选择合适的框架。

三、Flask RESTful API 示例讲解

1)Flask-RESTful 库讲解

Flask-RESTful 是一个基于 Flask 的扩展库,它提供了一些方便的工具来构建 RESTful API。下面是 Flask-RESTful 的一些主要特点和功能:

  • 资源类:Flask-RESTful 提供了一个 Resource 基类,可以用来创建资源。Resource 类包含了 HTTP 方法(GETPOSTPUTDELETE

  • 🎜🎜Couche de présentation🎜 : les ressources peuvent être représentées dans différents formats, tels que JSON, XML, HTML, etc. . Les clients peuvent choisir la représentation appropriée avec laquelle interagir selon leurs besoins. Par exemple, une API RESTful peut renvoyer des données au format JSON afin que les clients puissent analyser et traiter plus facilement les données. 🎜🎜🎜🎜Messages auto-descriptifs🎜 : chaque message doit contenir suffisamment d'informations pour décrire comment gérer le message. Par exemple, une réponse HTTP doit contenir des informations telles que le code d'état, les en-têtes de réponse et le corps de la réponse afin que le client puisse comprendre la signification de la réponse. 🎜🎜🎜🎜Communication sans état🎜 : la conception de style RESTful met l'accent sur la communication sans état, ce qui signifie que chaque demande doit contenir toutes les informations nécessaires pour traiter la demande sans s'appuyer sur les demandes précédentes. Cela peut rendre les applications Web plus simples et évolutives, car le serveur n'a pas besoin de conserver d'informations d'état. 🎜🎜🎜🎜Interface unifiée🎜 : toutes les ressources doivent être accessibles via la même interface. Cela signifie que les clients peuvent utiliser les mêmes méthodes HTTP (telles que GET, POST, PUT, DELETE, etc. .) pour exploiter différents types de ressources. Cela rend l'API plus simple et plus cohérente, et plus facile à comprendre et à utiliser pour les autres développeurs. 🎜
🎜En bref, la conception de style RESTful rend les applications Web plus flexibles, évolutives et faciles à maintenir, et constitue une manière moderne de concevoir des applications Web. 🎜🎜2. RESTful en Python🎜🎜Python peut être utilisé pour implémenter des applications Web de style RESTful, en utilisant généralement certains frameworks Web pour simplifier le processus de développement. Voici quelques frameworks Web Python courants : 🎜🎜🎜🎜Flask : Flask est un framework Web simple et léger qui peut être utilisé pour créer des programmes d'applications Web de style RESTful. . Il utilise la syntaxe du décorateur de Python pour définir les routes HTTP, rendant ainsi l'écriture d'applications Web simple et intuitive. Flask fournit également un mécanisme d'extension afin que les développeurs puissent facilement ajouter de nouvelles fonctionnalités, telles que l'accès à la base de données, la validation de formulaires, etc. 🎜🎜🎜Django : Django est un framework Web puissant et complet qui peut être utilisé pour créer des applications Web complexes. Il fournit de nombreuses fonctionnalités intégrées telles que ORM (Object Relational Mapping), la validation de formulaire, l'authentification, etc. qui permettent aux développeurs de créer des applications Web plus rapidement. Django prend également en charge le développement d'applications Web de style RESTful, qui peuvent être implémentées à l'aide de la bibliothèque tierce Framework REST Django. 🎜🎜🎜Bottle : Bottle est un framework Web léger qui utilise la syntaxe du décorateur de Python pour définir des routes HTTP et peut rapidement créer une application Web de style RESTful. Bottle comprend également des fonctionnalités utiles telles que le moteur de modèles, l'accès à la base de données, le traitement des fichiers statiques, etc. 🎜🎜🎜Pyramid : Pyramid est un framework Web flexible et hautement personnalisable qui peut être utilisé pour créer différents types d'applications Web, y compris des applications Web de style RESTful. Pyramid fournit de nombreux mécanismes d'extension qui permettent aux développeurs d'ajouter facilement de nouvelles fonctionnalités, telles que l'accès à la base de données, la validation de formulaires, l'authentification, etc. 🎜🎜Les frameworks ci-dessus prennent tous en charge le développement d'applications Web de style RESTful et ont tous leurs propres avantages et inconvénients. Les développeurs peuvent choisir le framework approprié en fonction de leurs propres besoins. 🎜🎜3. Explication de l'exemple d'API RESTful de Flask🎜

1) Explication de la bibliothèque Flask-RESTful

🎜Flask-RESTful est une bibliothèque d'extension basée sur Flask, qui fournit des outils pratiques pour créer une API RESTful. Voici quelques-unes des principales caractéristiques et fonctions de Flask-RESTful : 🎜🎜🎜🎜🎜Classe de ressources🎜 : Flask-RESTful fournit une classe de base de ressources qui peut être utilisée pour créer des ressources. La classe Resource contient la logique de traitement des méthodes HTTP (GET, POST, PUT, DELETE, etc.) et fournit Fournit des méthodes pratiques pour gérer les demandes et les réponses. 🎜
  • Analyse des paramètres de requête : Flask-RESTful fournit une classe RequestParser pour analyser les paramètres de requête. RequestParser peut analyser automatiquement les paramètres de requête, les paramètres de formulaire, les paramètres JSON, etc. en types Python, et fournit certaines options pour spécifier les types de paramètres, les valeurs par défaut, doivent exister et d'autres restrictions. RequestParser 类,用于解析请求参数。RequestParser 可以自动将查询参数、表单参数、JSON 参数等解析成 Python 类型,并提供了一些选项来指定参数的类型、默认值、必须存在等限制条件。

  • 响应格式化:Flask-RESTful 提供了一个 marshal_with() 装饰器,用于格式化响应数据。marshal_with() 装饰器可以将 Python 对象转换成指定的输出格式(如 JSON、XML 等),并支持指定输出字段、字段类型、嵌套字段等功能。

  • 路由定义: Flask-RESTful 提供了一个 Api 类,用于定义路由和资源的映射关系。Api 类包含了 add_resource()方法,用于将资源类和 URL 路由绑定起来。

  • 异常处理:Flask-RESTful 提供了一些异常类,用于处理 HTTP 请求和响应中的错误。Flask-RESTful 的异常类包括 abortHTTPException 等,可以方便地处理 HTTP 状态码错误信息等。

  • 综上所述,Flask-RESTful 提供了一些方便的工具来简化 RESTful API 的开发。使用 Flask-RESTful 可以快速地定义资源、解析请求参数、格式化响应数据、定义路由和处理异常等,从而提高开发效率并降低出错的风险。

    2)Flask-RESTful 库安装

    要安装 Flask-RESTful 库,可以使用 pip 命令进行安装。在终端中执行以下命令:

    pip3 install flask-restful

    这将会从 PyPI 上下载 Flask-RESTful 库,并安装到本地的 Python 环境中。安装完成后,就可以在代码中导入 flask_restful 模块,使用 Flask-RESTful 提供的功能来构建 RESTful API。

    3)RESTful 示例讲解

    下面是一个简单的 Flask RESTful API 示例,它实现了一个简单的 To-Do List 应用程序:

    from flask import Flask, request
    from flask_restful import Api, Resource, reqparse, fields, marshal_with
    app = Flask(__name__)
    api = Api(app)
    todos = {}
    todo_fields = {
        &#39;id&#39;: fields.Integer,
        &#39;task&#39;: fields.String,
        &#39;status&#39;: fields.Boolean
    }
    class TodoList(Resource):
        @marshal_with(todo_fields)
        def get(self):
            return todos
        @marshal_with(todo_fields)
        def post(self):
            parser = reqparse.RequestParser()
            parser.add_argument(&#39;task&#39;, type=str, help=&#39;Task is required&#39;, required=True)
            args = parser.parse_args()
            todo_id = len(todos) + 1
            todo = {&#39;task&#39;: args[&#39;task&#39;], &#39;status&#39;: False}
            todos[todo_id] = todo
            return todo, 201
    class TodoItem(Resource):
        @marshal_with(todo_fields)
        def get(self, todo_id):
            return todos[todo_id]
        def put(self, todo_id):
            parser = reqparse.RequestParser()
            parser.add_argument(&#39;task&#39;, type=str)
            parser.add_argument(&#39;status&#39;, type=bool)
            args = parser.parse_args()
            todo = todos[todo_id]
            if args[&#39;task&#39;]:
                todo[&#39;task&#39;] = args[&#39;task&#39;]
            if args[&#39;status&#39;]:
                todo[&#39;status&#39;] = args[&#39;status&#39;]
            return todo
        def delete(self, todo_id):
            del todos[todo_id]
            return &#39;&#39;, 204
    api.add_resource(TodoList, &#39;/todos&#39;)
    api.add_resource(TodoItem, &#39;/todos/<int:todo_id>&#39;)
    if __name__ == &#39;__main__&#39;:
        app.run(debug=True)

    启动

    # 配置环境变量
    export FLASK_APP=restful-test.py
    # 启动服务,公开访问需要加上--host=0.0.0.0
    python -m flask run --host=0.0.0.0

    该示例使用 Flask 和 Flask-RESTful 库来实现 To-Do List 应用程序的 RESTful API。下面是一些重要的代码片段的解释:

    • 定义资源:在示例中,有两个资源:TodoList 和 TodoItemTodoList 用于处理所有的 To-Do 任务列表,TodoItem 用于处理单个任务。

    • 定义请求参数:在示例中,我们使用 Flask-RESTful 库的 RequestParser 来解析请求参数。我们定义了 'task' 和 'status' 参数,并使用 add_argument() 方法来指定它们的类型和其他限制条件。

    • 定义响应格式:在示例中,我们使用 Flask-RESTful 库的 marshal_with() 装饰器来定义响应的格式。我们定义了一个名为 todo_fields 的字典,其中包含了 To-Do 任务的 idtask 和 status 字段。

    • 定义请求方法:在示例中,我们使用 Flask-RESTful 库的 Resource 类来定义请求方法。我们实现了 GETPOSTPUT 和 DELETE 方法,用于获取任务列表添加任务更新任务删除任务

    • 添加路由:在示例中,我们使用 Flask-RESTful 库的 Api 类来添加路由。我们使用 add_resource()

    Formatage de la réponse : Flask-RESTful fournit un décorateur marshal_with() pour formater les données de réponse. marshal_with() Le décorateur peut convertir des objets Python dans des formats de sortie spécifiés (tels que JSON, XML, etc.) et prend en charge des fonctions telles que la spécification de champs de sortie, de types de champs, de champs imbriqués, etc.

    Définition d'itinéraire

     : Flask-RESTful fournit une classe Api pour définir la relation de mappage entre les itinéraires et les ressources. La classe Api contient la méthode add_resource(), qui est utilisée pour lier les classes de ressources et les routes d'URL.

    Gestion des exceptions : Flask-RESTful fournit des classes d'exception pour gérer les erreurs dans les requêtes et les réponses HTTP. Les classes d'exception de Flask-RESTful incluent abort, HTTPException, etc., qui peuvent facilement gérer les codes d'état HTTP

    , les

    messages d'erreur, etc.

    Comment utiliser Python Flask RESTfulPour résumer, Flask-RESTful fournit des outils pratiques pour simplifier le développement de l'API RESTful. En utilisant Flask-RESTful, vous pouvez définir rapidement des ressources, analyser les paramètres de requête, formater les données de réponse, définir des itinéraires, gérer les exceptions, etc., améliorant ainsi l'efficacité du développement et réduisant le risque d'erreurs.

    2) Installation de la bibliothèque Flask-RESTful

    🎜Pour installer la bibliothèque Flask-RESTful, vous pouvez utiliser la commande pip pour l'installer. Exécutez la commande suivante dans le terminal : 🎜
    # GET http://localhost:5000/todos
    curl http://localhost:5000/todos
    🎜Cela téléchargera la bibliothèque Flask-RESTful depuis PyPI et l'installera dans votre environnement Python local. Une fois l'installation terminée, vous pouvez importer le module flask_restful dans votre code et utiliser les fonctions fournies par Flask-RESTful pour créer une API RESTful. 🎜

    3) Explication de l'exemple RESTful

    🎜Ce qui suit est un exemple simple d'API Flask RESTful, qui implémente une simple application de liste de tâches : 🎜
    # POST http://localhost:5000/todos
    curl -XPOST http://localhost:5000/todos -d &#39;task=123&#39;
    curl -XPOST http://localhost:5000/todos -d &#39;{"task":"456"}&#39;  --header "Content-Type: application/json"
    🎜Start🎜
    # GET http://localhost:5000/todos/1
    curl http://localhost:5000/todos/1
    🎜Cet exemple utilise Flask et Flask -RESTful library pour implémenter l'API RESTful pour l'application To-Do List. Voici quelques extraits de code importants expliqués : 🎜
      🎜🎜🎜Définir les ressources🎜 : Dans l'exemple, il y a deux ressources : TodoList et TodoItem . TodoList est utilisé pour traiter toutes les listes de tâches à faire, et TodoItem est utilisé pour traiter une seule tâche. 🎜🎜🎜🎜🎜Définir les paramètres de la requête🎜 : Dans l'exemple, nous utilisons le RequestParser de la bibliothèque Flask-RESTful pour analyser les paramètres de la requête. Nous définissons les paramètres 'task' et 'status' et utilisons la méthode add_argument() pour spécifier leurs types et autres contraintes. 🎜🎜🎜🎜🎜Définir le format de réponse🎜 : Dans l'exemple, nous utilisons le décorateur marshal_with() de la bibliothèque Flask-RESTful pour définir le format de la réponse. Nous définissons un dictionnaire nommé todo_fields, qui contient le id, la tâche et le statut de la tâche To-Do > Champ. 🎜🎜🎜🎜🎜Définir la méthode de requête🎜 : Dans l'exemple, nous utilisons la classe Resource de la bibliothèque Flask-RESTful pour définir la méthode de requête. Nous avons implémenté les méthodes GET, POST, PUT et DELETE pour 🎜obtenir la liste des tâches🎜 et 🎜ajouter Tâches 🎜, 🎜Mettre à jour les tâches🎜 et 🎜Supprimer les tâches🎜. 🎜🎜🎜🎜🎜Ajouter une route🎜 : Dans l'exemple, nous utilisons la classe Api de la bibliothèque Flask-RESTful pour ajouter la route. Nous utilisons la méthode add_resource() pour lier les classes TodoList et TodoItem aux routes URL correspondantes. 🎜🎜🎜🎜Après avoir exécuté l'exemple, vous pouvez utiliser l'API RESTful de l'application To-Do List en accédant à l'URL. Par exemple, pour 🎜 obtenir une liste de toutes les tâches 🎜, vous pouvez utiliser l'URL suivante : 🎜
      # PUT http://localhost:5000/todos/1
      curl -XPUT http://localhost:5000/todos/1 -d &#39;{"task":"test"}&#39;  --header "Content-Type: application/json"
      # 查看
      curl http://localhost:5000/todos/1
      🎜 Pour 🎜 ajouter une nouvelle tâche 🎜, vous pouvez utiliser l'URL suivante : 🎜
      # DELETE http://localhost:5000/todos/1
      curl -XDELETE http://localhost:5000/todos/1
      🎜 Pour 🎜 obtenir une seule tâche 🎜, vous pouvez utiliser l'URL suivante : 🎜rrreee🎜 🎜Pour mettre à jour une tâche🎜, vous pouvez utiliser l'URL suivante : 🎜rrreee🎜 Pour 🎜supprimer une tâche🎜, vous pouvez utiliser l'URL suivante : 🎜rrreee🎜🎜🎜

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer