如何用Python快速构建API

Mary-Kate Olsen
发布: 2024-11-06 14:15:02
原创
115 人浏览过

API 是大多数依赖数据交换或外部集成的应用程序的支柱。

学习用 Python 构建 API 可以为您的应用程序与其他系统连接并创建多功能后端提供许多机会。

在这里,我将引导您了解 API 的基础知识,创建 REST API,并使用 Flask 和 FastAPI(两个流行的 Python 框架)构建它们。


1. API简介

在当今的数字世界中,API 无处不在。

它们允许不同的系统和应用程序相互通信,无缝共享数据和功能。

例如,当您使用应用查看天气时,它实际上是调用返回天气数据的 API。

API 通过充当以标准化方式处理请求和返回数据的中介,让生活变得更轻松。

还值得注意的是,API 不仅仅为客户端应用程序(如网站或移动应用程序)提供服务。

API 可以在同一基础设施内的后端系统或微服务之间使用,以更有效地管理数据。


2.REST API

REST(表述性状态传输)由于其简单性和与 HTTP 的兼容性而成为创建 API 的最流行的方法之一。

RESTful API 的结构允许标准 HTTP 方法(如 GET、POST、PUT、DELETE)来操作资源。

它们通常用于管理 CRUD(创建、读取、更新和删除)操作,其中每个请求方法对资源数据执行操作。

如果您正在构建 Web 服务,REST 可能是最平易近人且受到广泛支持的格式。

REST API 也是无状态的,这意味着每个请求独立运行,从而允许 REST API 更轻松地扩展。


3. 使用 Flask 构建 API

Flask 是我中小型项目的首选,因为它轻量级且易于启动和运行。

Flask 可以让您控制 API 的几乎每个方面,但它还需要在数据验证和错误处理方面做更多的工作。

这种灵活性对于那些想要更多地控制 API 各部分功能的人来说是理想的选择。

创建 Flask API 的示例

以下是任务管理 API 在 Flask 中的外观。

首先,确保使用 pip 安装 Flask:

pip install flask
登录后复制
登录后复制
登录后复制

此示例展示了如何快速设置用于获取和创建任务以及更新和删除任务的端点。

from flask import Flask, jsonify, request

app = Flask(__name__)

tasks = [
    {"id": 1, "task": "Learn Flask", "done": False},
    {"id": 2, "task": "Build API", "done": False}
]

@app.route('/tasks', methods=['GET'])
def get_tasks():
    return jsonify({"tasks": tasks})

@app.route('/tasks', methods=['POST'])
def create_task():
    new_task = {
        "id": len(tasks) + 1,
        "task": request.json["task"],
        "done": False
    }
    tasks.append(new_task)
    return jsonify(new_task), 201

@app.route('/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        task.update(request.json)
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        tasks.remove(task)
        return jsonify({"message": "Task deleted"})
    return jsonify({"message": "Task not found"}), 404

if __name__ == '__main__':
    app.run(debug=True)

登录后复制
登录后复制
登录后复制

此 Python 代码使用 Flask 设置 REST API 来管理任务列表,允许客户端创建、检索、更新和删除任务。

任务存储在一个列表中,其中每个任务都是一个带有 id、任务和完成状态的字典。

/tasks 端点支持 GET 请求以返回完整的任务列表,并支持 POST 请求以添加新任务,自动为每个任务分配唯一的 ID。

其他端点 /tasks/ 允许用户与各个任务交互:GET 通过 ID 检索特定任务,PUT 更新它,DELETE 将其从列表中删除。

如果未找到具有指定 ID 的任务,这些端点将返回 404 错误以及相应的消息。

API 在调试模式下运行,非常适合开发和测试目的。

请注意,对于较大的项目,您可能需要添加更多结构化路由和验证机制。


4. 使用 FastAPI 构建 API

FastAPI 是性能敏感的应用程序或需要更多结构和类型安全的项目的绝佳选择。

FastAPI 默认设计得更快(得益于其异步功能),并使用 Pydantic 提供开箱即用的强大数据验证。

我发现 FastAPI 非常直观且易于使用,特别是对于我需要异步功能并希望无需第三方包即可进行内置验证的项目。

此外,自动文档(通过 Swagger UI)使其变得非常方便。

创建 FastAPI API 的示例

这是任务管理 API 在 FastAPI 中的外观。

不要忘记先用 pip 安装 fastapi 和 uvicorn:

pip install flask
登录后复制
登录后复制
登录后复制

然后您可以创建 API:

from flask import Flask, jsonify, request

app = Flask(__name__)

tasks = [
    {"id": 1, "task": "Learn Flask", "done": False},
    {"id": 2, "task": "Build API", "done": False}
]

@app.route('/tasks', methods=['GET'])
def get_tasks():
    return jsonify({"tasks": tasks})

@app.route('/tasks', methods=['POST'])
def create_task():
    new_task = {
        "id": len(tasks) + 1,
        "task": request.json["task"],
        "done": False
    }
    tasks.append(new_task)
    return jsonify(new_task), 201

@app.route('/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        task.update(request.json)
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        tasks.remove(task)
        return jsonify({"message": "Task deleted"})
    return jsonify({"message": "Task not found"}), 404

if __name__ == '__main__':
    app.run(debug=True)

登录后复制
登录后复制
登录后复制

此 Python 代码使用 FastAPI 创建任务管理 API,利用 Pydantic 模型进行数据验证和类型强制。

它定义了一个带有 id、任务和完成状态的任务模型,并初始化任务列表。

API 包括对任务执行 CRUD 操作的端点:/tasks 端点允许 GET 请求检索任务列表,并允许 POST 请求添加新任务,自动验证传入数据。

/tasks/{task_id} 端点允许使用 GET 检索特定任务、使用 PUT 更新以及使用 DELETE 删除,如果未找到具有指定 id 的任务,则返回 404 错误。

FastAPI 的异步功能和集成文档使该 API 高效且易于测试,非常适合快速开发。


5. 测试API

测试至关重要,尤其是在创建其他应用程序将使用的 API 时。

Flask 和 FastAPI 为单元测试提供了出色的支持,可以轻松验证每个端点的行为。

为了使测试更容易,我建议使用 pytest 进行一般测试结构,因为它与 Flask 和 FastAPI 兼容。

特别是对于 FastAPI,TestClient 是一个模拟 HTTP 请求和检查响应的有用工具。

您需要使用 pip 安装 httpx:

pip install flask
登录后复制
登录后复制
登录后复制

以下是测试 FastAPI 端点的示例:

from flask import Flask, jsonify, request

app = Flask(__name__)

tasks = [
    {"id": 1, "task": "Learn Flask", "done": False},
    {"id": 2, "task": "Build API", "done": False}
]

@app.route('/tasks', methods=['GET'])
def get_tasks():
    return jsonify({"tasks": tasks})

@app.route('/tasks', methods=['POST'])
def create_task():
    new_task = {
        "id": len(tasks) + 1,
        "task": request.json["task"],
        "done": False
    }
    tasks.append(new_task)
    return jsonify(new_task), 201

@app.route('/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        task.update(request.json)
        return jsonify(task)
    return jsonify({"message": "Task not found"}), 404

@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
    task = next((task for task in tasks if task["id"] == task_id), None)
    if task:
        tasks.remove(task)
        return jsonify({"message": "Task deleted"})
    return jsonify({"message": "Task not found"}), 404

if __name__ == '__main__':
    app.run(debug=True)

登录后复制
登录后复制
登录后复制

使用这两个框架,测试都很简单,并且允许您验证 API 的行为是否符合预期,尤其是随着它的发展。


6. Flask 与 FastAPI 的比较

我们来看看 Flask 和 FastAPI 的比较

How to Quickly Build APIs in Python

如果您正在开发快速原型或较小的项目,Flask 的简单性可能就是您所需要的。

对于需要高并发、数据验证或自动文档的项目,FastAPI 提供了更强大、功能丰富的环境。


七、结论

Flask 和 FastAPI 都有适合不同类型项目的优势。

如果您是 Python Web 开发新手,从 Flask 开始可以帮助您了解基础知识,然后再转向更高级的内容。

另一方面,如果您正在寻找具有内置验证和文档的现代、高性能 API 开发,FastAPI 是一个理想的选择。

无论您选择哪一个,Python 都为 API 开发提供了强大的生态系统。

这两个框架都允许您创建可以为各种应用程序(从简单的网站到复杂的微服务)提供支持的 API。

关键是要进行实验,了解每个框架的优势,并选择适合您需求的工具。

以上是如何用Python快速构建API的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!