如何使用 Flask 构建 RESTful API

阅读时长 9 分钟读完

在开发 Web 应用程序的时候,经常会需要使用 API 来获取数据或者进行数据的交互。而使用 Flask 来构建 RESTful API 是一种不错的选择。在这篇文章中,我们将向你介绍如何使用 Flask 构建 RESTful API,并提供示例代码和使用指导。

什么是 RESTful API

首先,我们需要了解什么是 RESTful API。REST(Representational State Transfer)是一种架构风格,通常用于通过 HTTP 协议对服务进行访问和数据交互。RESTful API 就是符合 REST 规范的 API 设计风格。

RESTful API 是按照一种特定的方式定义 URL,以便向客户端提供固定格式的消息。这些消息可以是 JSON、XML 或其他格式。REST 的优点包括:

  • 简单性:轻量级的协议,容易了解和使用。
  • 可扩展性:支持标准的 HTTP 协议,容易与其它技术集成。
  • 松耦合性:客户端和服务端之间的解耦,允许单独开发和部署。

使用 Flask 实现 RESTful API

在 Flask 中实现 RESTful API 可以通过 Flask-Restful 扩展来完成。Flask-Restful 是针对 Flask 框架设计的一款支持 REST 规范的扩展,可以快速、方便地开发 RESTful API。

安装 Flask-Restful

安装 Flask-Restful 很简单,只需要使用 pip 命令即可:

定义 API 路由

定义 API 路由是 Flask-Restful 中的第一步。路由将请求映射到相应的资源处理方法上。

例如,我们可以定义一个简单的路由,用于返回一个 JSON 格式的消息:

-- -------------------- ---- -------
---- ----- ------ -----
---- ------------- ------ --------- ---

--- - ---------------
--- - --------

----- ---------------------
    --- ----------
        ------ --------- --------

---------------------------- ----

-- -------- -- -----------
    -------------------

这个简单的例子定义了一个名为 HelloWorld 的资源,该资源继承了 Flask-Restful 中的 Resource 类,重写了 HTTP 的 GET 方法获取资源并返回一个 JSON 格式的消息。

使用 HTTP 方法

HTTP 协议定义了一些标准的方法,例如 GET、POST、PUT、DELETE 等。在 Flask-Restful 中,你可以使用这些 HTTP 方法定义资源的不同操作。

例如,我们可以在上面的例子中增加 PUT 方法来更新资源:

使用 RequestParser

在 RESTful API 中,你可以使用 Query Parameters 或者 Request Body 来传递参数。而 Flask-Restful 中提供的 RequestParser 可以帮助我们获取这些参数。

下面是一个示例,用于获取包含参数的 POST 请求:

-- -------------------- ---- -------
---- ------------- ------ --------

------ - ------------------------
--------------------------- --------- ---------- -- --- ------
-------------------------- --------- --------- -- --- ------

----- ---------------
    --- -----------
        ---- - -------------------
        ---- - ------------
        --- - -----------
        ------ -------- ----- ------ ----

这个例子中,我们定义了一个名为 User 的资源,其中 post 方法使用 RequestParser 来获取传递的参数。

使用 Flask-JWT 实现认证

Flask-JWT 是 Flask 中的一个扩展,提供了基于 JSON Web Token 的身份验证机制。在我们的 RESTful API 中,使用 Flask-JWT 可以很容易地实现身份验证功能。

首先,我们需要安装 Flask-JWT:

然后,在 Flask 中初始化 Flask-JWT:

-- -------------------- ---- -------
---- --------- ------ ---- ------------- ----------------
---- ----------------- ------ ------------

--- - ---------------
------------------------ - --------------
----------------------------------- - -------
---------------------------------- - -----------------

----- -------------
    --- -------------- --- --------- ----------
        ------- - --
        ------------- - --------
        ------------- - --------

    --- --------------
        ------ --------------- - -------

----- - -
    ------- -------- -------------
    ------- -------- -------------
-

--- ------------------- ----------
    ---- - -- --- - -- ----- -- ---------- -- ---------
    -- ---- --- ------------------------------------------- --------------------------
        ------ ----

--- ------------------
    ------- - -------------------
    ------ ------- --- - -- ----- -- ---- -- --------- -----

--- - -------- ------------- ---------

在这个示例中,我们定义了一个 User 类模拟一个数据库记录。authenticate 方法用于验证用户的凭据,identity 方法用于返回当前用户。最后,我们使用 JWT 将这些方法作为参数传入。

在这个例子中,我们还定义了三个配置选项:

  • SECRET_KEY:用于生成 JWT 的密钥。
  • JWT_AUTH_USERNAME_KEY:标识用户的关键属性,默认设置为 'username'。
  • JWT_EXPIRATION_DELTA:JWT 的过期时间,从当前时间的 timedelta 对象。

使用 SQLAlchemy

在大多数的 Web 应用程序中,你会需要使用数据库来存储和管理数据。而在 Flask 中,可以使用 SQLAlchemy 扩展来与数据库进行交互。

首先,我们需要安装 SQLAlchemy:

然后,在 Flask 中初始化 SQLAlchemy:

在这个例子中,我们设置了 SQLite 数据库的 URI,然后初始化了 SQLAlchemy 对象。

除此之外,你还需要定义一个数据模型来表示你的数据。例如,你可以定义一个名为 Recipe 的数据模型:

在这个数据模型中,我们定义了三个属性:id、name 和 description,分别表示唯一标识、名称和描述。repr 方法用于打印模型的漂亮字符串表示。

接着,你可以在你的 RESTful API 中使用这个数据模型:

-- -------------------- ---- -------
----- ---------------------
    --- ----------
        ------- - ------------------
        ------ ----------- ------------ --- ------ -- ---------

    --- -----------
        ------ - ------------------------
        --------------------------- --------- -------------- ---------- -- --- --------
        ---------------------------------- --------- -------------- ----------------- -- --- --------
        ---- - -------------------

        ------ - ------------------------- --------------------------------
        ----------------------
        -------------------

        ------ -------- ------------ -------------- -------------------- ---

在这个示例中,我们定义了一个名为 RecipeList 的资源,其中通过 GET 方法列出所有的 Recipe,通过 POST 方法创建一个新的 Recipe。在 POST 方法中,我们通过 RequestParser 获取必要的参数,并使用 SQLAlchemy 将新的 Recipe 保存到数据库中。

总结

在这篇文章中,我们学习了如何使用 Flask 来构建 RESTful API,并使用 Flask-Restful、Flask-JWT 和 SQLAlchemy 等扩展来提供更丰富的功能。我们希望这篇文章对你有所帮助,具体代码可以到 GitHub 上查看。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6503bc8a95b1f8cacd082f3e

纠错
反馈