构建最简单的REST API
引言
REST API无处不在 — 没有它们,网站将会无聊得多。它们是集成网站的 前端 和 后端 的关键,今天我们将自己构建一个 — 只需不到五分钟。
定义REST API
REST API — 全称是 表述性状态转移应用程序接口 — 它允许不同的编程语言和应用程序的各个部分相互通信。原本这些语言无法相互交流,因为它们无法理解彼此的代码。这将是一个巨大的损失,因为一些编程语言在不同领域表现更好或专门用于特定任务 — 例如,你永远不会使用JavaScript进行机器学习。然而,Python是这方面的首选语言 — 这就是REST API展现其价值的地方。
本质上,这些API在服务器上下传递信息,这些信息可以被解码并发送给客户端。这种类型的API的强项是它非常适用于数据库 — 有四种基本的 HTTP方法 可以使用。
- GET — 从服务器获取数据
- POST — 在服务器中创建记录
- PUT/PATCH — 更新服务器中的记录
- DELETE — 删除服务器中现有的记录
这些可以用缩写CRUD(创建、读取、更新和删除)来记忆。
使用工具概览
为了创建我们的REST API,我们需要安装一些先决条件(我们将在 下一节)。不过在开始之前,让我们快速看一下我们实际要使用的工具。
首先,对于我们API的 后端 部分 — 处理数据库、传入请求和修改数据的部分 — 我们将使用Python,以及一个很棒的库叫做 Flask。如果你对Python不太熟悉也不用担心 — 代码会很简短,而且有详细的解释。除了这个库,我们实际上在后端不需要其他任何东西!
对于那些感兴趣的人来说,Flask的一个流行替代品是 Django. 然而,这比Flask更进一步,通常也更复杂,所以在这篇文章中我们还是会坚持使用Flask。
对于我们RESTful API的前端部分,我们将使用JavaScript来修改用户看到的HTML页面 — 给出我们的API正常工作的可视化证明。同样,如果你不懂JavaScript也不用担心 — 这段代码会比后端更简单!
要求 + 安装
要求
Python >= 3.4Flask == 1.1.2- 一个网页浏览器
让我们开始设置。如果你还没有Python,请下载它 在这里.
接下来是我们第一个实际安装 — Flask。如果你的Python版本大于或等于3.4(你可以在终端中用 python3 -V 来检查),那么你就可以进行下一步了。如果不是,你需要安装 pip 或将你的Python升级到更现代的版本 — 说明在他们的网站上 在这里.
一旦你安装了Flask,你可以在终端的任何地方输入 python3 -m pip install Flask 经过一两分钟后,你就会安装好Flask库。继续前进!
构建后端
我们将从构建 后端 开始 — 这是客户端看不到的部分,也是应用程序中进行繁重工作并处理HTTP请求的部分。我们将使用Python和Flask来构建这个部分。
首先,我们需要导入我们的库。创建一个新文件,随意命名——只需确保以 .py 扩展名结尾,以便将其识别为Python文件。我将把我的命名为 app.py.
然后我们可以开始在下面导入Flask。
导入 flask import Flask
接下来,我们需要初始化我们的Flask网络应用程序。
app = Flask(__name__)
接下来,让我们创建一个Flask route,这实际上是用户必须访问的URL,以便能够访问内容。我们将在 /hello创建一个路由,这样用户就可以访问该URL来访问那里的数据。我们可以使用 decorator 来创建这个路由——本质上是一个包装另一个函数的函数。
装饰器本身可以成为一个完整的帖子主题,但本质上它们会执行一些操作,执行它们"装饰"的函数,然后继续执行一些操作——基本上是在另一个函数周围包装一些指令。
在Python中,我们可以使用"@"符号来指定装饰器。让我们往下几行,设置我们的Flask路由装饰器。
@app.route("/hello", methods=["GET"])
上述代码在主页上设置了一个应用程序路由,并支持 GET requests(这样JavaScript就可以访问数据)。让我们继续创建实际执行的函数,当用户访问时会执行。在装饰器的下一行,输入以下代码(或者你可以跳到 完整的代码 并一次性复制所有代码)。
def hello(): # you can name this anything you want
return {"response": "Hello from Python!"}
我们在上面设置的函数返回数据,以JSON的形式 — JavaScript对象表示法的缩写,一种可以被大多数其他主要编程语言读取的语言。它以 对象的形式发送数据,其中有一个名为"response"的键和值为"Hello from Python"的值 — 有点类似于Python字典。
最后,我们需要让应用程序准备好运行。我们可以通过在文件底部添加一个 app.run() 函数来实现这一点。
if __name__ == "__main__":
app.run(debug = True)
app.run() 意味着当我们从命令行运行代码时应用程序将运行,我们设置 debug 到 True 这样我们就可以看到所有发生的事情并捕获任何潜在的错误。
这就是后端和Python的全部内容了!我们现在准备好简单的前端了 — 仅仅7行代码!我们需要稍微修改这个文件,以便我们可以提供JavaScript和HTML文件,但那只需要再添加几行代码。你 可以 尝试运行这个程序,打开你的终端,导航到当前Python文件所在的目录,然后输入 python3 my-file-name.py.
如果你这样做了,你会在控制台看到一些信息,说明服务器正在localhost:5000上运行。如果你访问 http://localhost:5000/hello,你就能看到那里的JSON了!它会以我们发送的方式显示(虽然会是JSON格式)。你应该会看到类似下面这样的内容:
{"response": "Hello from Python!"}
然而,我们仍然要添加一些JavaScript和HTML来手动获取数据,因为这些REST API通常是供应用程序使用的,而不是直接由用户查看的。
设置前端
我们将使用JavaScript来访问API,并使用一些非常简单的HTML来创建一个用户可以查看的索引页面。让我们开始吧。
首先,我们要在Python文件所在的同一目录下创建一个名为 templates 的文件夹,并在其中创建一个名为 index.html的文件。这个文件将被Python 渲染 当用户访问我们的localhost网站时。我不会详细讲解 index.html 文件的内容 - 它只是一个简单的文件,有一个标题和一个供JavaScript注入代码的空间。
lang="en">
charset="UTF-8">
name="viewport" content="width=device-width, initial-scale=1.0">
REST API Sandbox
Data from Python below!
id="fromJS">