News

如何使用 Python Flask 构建 API

Python Flask 是一个流行的框架,广泛用于构建 Web 应用程序和 API。它为开发人员提供了一种快速、简单的方法来创建可供其他软件应用程序使用的 RESTful API。Flask 的轻量级特性和最低限度的设置要求,使其成为构建中小型 API 的绝佳选择。这使得 Flask 成为希望用 Python 构建健壮且可扩展的 API 的开发者的理想选择。以下示例将介绍如何创建一个简单的 Flask REST API 教程。

先决条件

在开始之前,需要确保满足以下先决条件:

  1. 安装 Python
  2. 配置一个用于编辑代码的 IDE
  3. 安装 Postman 以便测试 API 端点

当这些先决条件都准备就绪后,就可以开始进行教程了!

创建基础项目

首先,在选择的目录中创建一个名为 python-flask-api 的文件夹。

创建新文件夹后,在该文件夹的根目录打开终端,以便执行命令来构建和运行 Python 项目。将终端指向项目的根目录后,运行以下命令以初始化 Python Rest API Flask 项目并管理依赖项。

首先,使用 pip 在项目目录中安装 Flask。为此,运行以下命令:

pip install Flask

编写代码

app.py 文件的第一行代码中,导入 jsonFlaskjsonifyrequest 模块:

import json
from flask import Flask, jsonify, request

接下来,通过在导入语句下方添加以下代码来创建一个新的 Flask 应用程序:

app = Flask(__name__)

为了给 API 提供一些可用的数据,定义一个包含 ID 和名称的员工对象数组:

employees = [
    { 'id': 1, 'name': 'Ashley' },
    { 'id': 2, 'name': 'Kate' },
    { 'id': 3, 'name': 'Joe' }
]

接着,定义 GET 请求到 /employees 端点的路由,以 JSON 格式返回所有员工:

@app.route('/employees', methods=['GET'])
def get_employees():
    return jsonify(employees)

除了 GET 方法外,还将定义 POST、PUT 和 DELETE 方法的路由,这些函数用于创建新员工以及根据给定的 ID 更新或删除员工:

@app.route('/employees', methods=['POST'])
def create_employee():
    global nextEmployeeId
    employee = json.loads(request.data)
    if not employee_is_valid(employee):
        return jsonify({ 'error': 'Invalid employee properties.' }), 400

    employee['id'] = nextEmployeeId
    nextEmployeeId += 1
    employees.append(employee)

    return '', 201, { 'location': f'/employees/{employee["id"]}' }

@app.route('/employees/<int:id>', methods=['PUT'])
def update_employee(id: int):
    employee = get_employee(id)
    if employee is None:
        return jsonify({ 'error': 'Employee does not exist.' }), 404

    updated_employee = json.loads(request.data)
    if not employee_is_valid(updated_employee):
        return jsonify({ 'error': 'Invalid employee properties.' }), 400

    employee.update(updated_employee)
    return jsonify(employee)

@app.route('/employees/<int:id>', methods=['DELETE'])
def delete_employee(id: int):
    global employees
    employee = get_employee(id)
    if employee is None:
        return jsonify({ 'error': 'Employee does not exist.' }), 404

    employees = [e for e in employees if e['id'] != id]
    return jsonify(employee), 200

一旦代码完成,最终的 app.py 文件应如下所示:

import json
from flask import Flask, jsonify, request

app = Flask(__name__)

employees = [
    { 'id': 1, 'name': 'Ashley' },
    { 'id': 2, 'name': 'Kate' },
    { 'id': 3, 'name': 'Joe' }
]

nextEmployeeId = 4

@app.route('/employees', methods=['GET'])
def get_employees():
    return jsonify(employees)

@app.route('/employees/<int:id>', methods=['GET'])
def get_employee_by_id(id: int):
    employee = get_employee(id)
    if employee is None:
        return jsonify({ 'error': 'Employee does not exist' }), 404
    return jsonify(employee)

def get_employee(id):
    return next((e for e in employees if e['id'] == id), None)

def employee_is_valid(employee):
    for key in employee.keys():
        if key != 'name':
            return False
    return True

@app.route('/employees', methods=['POST'])
def create_employee():
    global nextEmployeeId
    employee = json.loads(request.data)
    if not employee_is_valid(employee):
        return jsonify({ 'error': 'Invalid employee properties.' }), 400

    employee['id'] = nextEmployeeId
    nextEmployeeId += 1
    employees.append(employee)

    return '', 201, { 'location': f'/employees/{employee["id"]}' }

@app.route('/employees/<int:id>', methods=['PUT'])
def update_employee(id: int):
    employee = get_employee(id)
    if employee is None:
        return jsonify({ 'error': 'Employee does not exist.' }), 404

    updated_employee = json.loads(request.data)
    if not employee_is_valid(updated_employee):
        return jsonify({ 'error': 'Invalid employee properties.' }), 400

    employee.update(updated_employee)
    return jsonify(employee)

@app.route('/employees/<int:id>', methods=['DELETE'])
def delete_employee(id: int):
    global employees
    employee = get_employee(id)
    if employee is None:
        return jsonify({ 'error': 'Employee does not exist.' }), 404

    employees = [e for e in employees if e['id'] != id]
    return jsonify(employee), 200

if __name__ == '__main__':
    app.run(port=5000)

最后,添加一行代码以运行 Flask 应用程序,调用 run 方法并使 Flask 应用程序在端口 5000 上运行:

if __name__ == '__main__':
    app.run(port=5000)

运行和测试代码

编写并保存代码后,可以启动应用程序。在终端中执行以下命令来运行 Flask 应用:

python app.py

现在,API 已启动并运行。您可以通过 Postman 发送测试 HTTP 请求,向 http://localhost:5000/employees 发送 GET 请求。请求发送后,您应该在响应中看到 200 OK 状态代码以及返回的员工数组。

对于此测试,传入请求不需要请求正文。您可以在 Postman 中查看响应,确保 API 正常工作。

总结

通过上述步骤,成功使用 Python 创建了一个简单的 RESTful API Flask。可以根据需要扩展此代码,为应用程序构建更复杂的 API,满足具体需求。

原文链接:How To Build an API With Python Flask

Keyword: 翻译api

Leave a Reply

Your email address will not be published. Required fields are marked *