用Python、Flask和SQLite3创建一个API REST

413 阅读5分钟

在这个Python编程教程中,你将学习如何使用Flask、SQLite 3(用于数据)和JSON(用于数据通信)创建一个REST API。

最后,你将拥有一个可以从任何客户端消费的API,可以是一个Android应用程序,也可以是一个带有JavaScript的浏览器,甚至是其他服务器语言。

我将向你展示如何创建一个使用JSON进行通信的API,并将数据保存在SQLite 3中。该API将用Flask创建,我们将使用Python编程语言来处理所有数据。

API描述

使用Flask和Python的API

我们将使用4个最常用的HTTP动词。GET、POST、PUT和DELETE,这将与数据库的CRUD有关。

我们要管理的将是一个游戏数据库,它有一个名称、价格和评价(或评级)。我们还将有几个操作,我们将通过Flask创建的API进行公开。

  • 获取所有的游戏
  • 创建一个新游戏
  • 更新一个游戏
  • 删除一个游戏
  • 通过ID获取一个游戏

首先,我们要用Python创建与数据库相关的CRUD,随后我们要用Flask在API中公开所有这些功能,并编码为JSON。

SQLite3数据库

数据库的结构如下图所示。这是一个单一的表,尽管从这个教程中我们可以创建更多的表,关系,等等。

Gist上查看代码。

然后我们看到数据库的连接文件。

查看Gist上的代码。

在这个带有Python的SQLite3连接文件中,我们看到数据库将被称为games.db。此外,我们有两个函数:其中一个是获取数据库,另一个 (create_tables) 是在数据库中创建表,如果它们不存在的话

好好看看这些函数,因为我们要从其他文件中导入它们。现在我们已经定义了数据库,让我们看看用SQLite3数据库进行游戏的CRUD。

游戏控制器:数据库连接

在API中暴露数据库之前,我们要创建一个游戏控制器,它 将负责所有保存、更新、删除和获取游戏数据的操作

所有这些功能都在一个名为game_controller.py 的文件中,它看起来像这样。

Gist上查看该代码。

在该文件中,我们看到了几个函数。insert_game 函数接收游戏数据并将其插入数据库**(INSERT**);所有这些都使用准备好的语句,以避免在我们用Python和Flask创建的这个API中出现SQL注入

我们还看到其他的方法,如update_game ,执行UPDATE操作来更新一个游戏,delete_game ,从其id中删除一个游戏**(DELETE**),get_by_id ,从其id中返回一个游戏(使用SELECT操作)。

最后我们看一下get_games ,该函数返回所有现有的游戏

请注意,所有函数都使用数据库和游标来执行所有操作。

现在我们有了数据库操作的CRUD,是时候用Flask在API中暴露一切了。

用Flask和Python创建API

我们在API中做的第一件事是创建Flask应用程序并导入游戏控制器。我们还从数据库中导入一个函数,因为我们需要在启动应用程序时创建表。

Gist上查看代码。

现在我们用GET、PUT、POST和DELETE这些http动词定义路由。

查看Gist上的代码。

每条路径都暴露了我们之前看到的游戏控制器函数,它反过来与SQLite3数据库交互。有必要强调几件事。例如,当更新和插入一个游戏时**,我们用get_json 读取请求的JSON**,我们访问字典。

在删除或通过ID获得的情况下,我们从路径中读取变量id,作为<variable> ,并在方法中接收它。

还要注意的是,这个API与Python的通信是通过JSON进行的,所以所有的响应都是根据jsonify 函数返回的内容进行的。

最后我们创建Flask应用来启动服务器并监听请求。

Gist上查看代码。

可选:添加 CORS

如果你要从API监听的地方以外的域来消费这个API,你需要启用CORS。只需在API中添加以下代码片段(在资源库中你会发现已经添加了代码,如果你想的话可以删除)。

Gist上查看该代码。

把它全部放在一起

用Flask和SQLite3创建的这个API的完整代码是这样的。

查看Gist上的代码。

如果你想看其他文件的代码和完整的资源库。 访问我的GitHub.在那里你可以下载并测试所有的开源代码。

记住,要启动服务器和API,你必须执行。

python main.py

或者在失败的情况下。

python3 main.py

测试API

克隆和运行存储库后,你可以使用Postman或你选择的任何语言运行测试。稍后我将带来使用JavaScript框架或纯JavaScript的例子。

你也可以通过以下链接在线测试API(检查已定义的路由,以防出现404或405错误):https://apirestflaskpythonsqlite3.parzibyte.repl.co/

例如,要查看所有的游戏,请点击:https://apirestflaskpythonsqlite3.parzibyte.repl.co/games

同时,我给你留下一个测试API的截图。

用Flask和Python创建的API REST,使用SQLite和JSON进行消费。

如果你喜欢Python,我邀请你在我的博客上阅读更多关于这个主题的内容。或者了解更多关于Flask的内容。

The postCreating an API REST with Python, Flask and SQLite3appeared first onParzibyte's blog.