api接口开发实例

python,from flask import Flask, jsonify,,app = Flask(__name__),,@app.route('/api/hello', methods=['GET']),def hello():, return jsonify(message="Hello, World!"),,if __name__ == '__main__':, app.run(debug=True),`,,这个例子中,我们创建了一个简单的Flask应用,定义了一个/api/hello`的路由,当用户访问这个路由时,会返回一个JSON格式的响应,内容是”Hello, World!”。

API 接口开发实例:用户信息管理系统

api接口开发实例

一、项目

在当今数字化时代,用户信息的有效管理对于各类企业和组织至关重要,本实例将展示一个基于 Python 的 Flask 框架构建的用户信息管理系统 API,涵盖用户信息的增删改查功能,为前端应用或其他服务提供数据交互接口。

二、技术选型

编程语言:Python

Web 框架:Flask

数据库SQLite(轻量级,便于演示)

三、环境搭建

1、安装 Python:从 Python 官方网站(https://www.python.org/)下载并安装适合操作系统版本的 Python。

2、安装 Flask 和 SQLite 相关库:使用以下命令安装所需库:

pip install flask
pip install sqlite3

四、数据库设计

使用 SQLite 创建一个简单的用户表users,包含以下字段:

字段名 数据类型 约束 说明
id INTEGER PRIMARY KEY AUTOINCREMENT 用户 ID,主键自增
name TEXT NOT NULL 用户名
email TEXT UNIQUE NOT NULL 邮箱地址,唯一
password TEXT NOT NULL 密码

创建数据库和表的 SQL 语句如下:

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    password TEXT NOT NULL
);

五、API 接口实现

1、初始化 Flask 应用和配置数据库连接

from flask import Flask, request, jsonify
import sqlite3
app = Flask(__name__)
def get_db_connection():
    conn = sqlite3.connect('user_management.db')
    conn.row_factory = sqlite3.Row
    return conn

2、用户注册接口

接口描述:接收用户提交的注册信息(用户名、邮箱、密码),将新用户添加到数据库中,如果邮箱已存在或缺少必要信息,返回相应错误提示。

请求方法:POST

请求 URL/register

api接口开发实例

请求参数:JSON 格式,包含nameemailpassword 字段

响应示例:成功时返回用户信息和状态码 201;失败时返回错误信息和相应状态码(如 400 表示请求错误,409 表示冲突)

@app.route('/register', methods=['POST'])
def register():
    data = request.get_json()
    if not data or 'name' not in data or 'email' not in data or 'password' not in data:
        return jsonify({"error": "Missing required fields"}), 400
    name = data['name']
    email = data['email']
    password = data['password']
    
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE email = ?", (email,))
    user = cursor.fetchone()
    
    if user:
        return jsonify({"error": "Email already exists"}), 409
    
    cursor.execute("INSERT INTO users (name, email, password) VALUES (?, ?, ?)", (name, email, password))
    conn.commit()
    conn.close()
    
    new_user = {
        "id": cursor.lastrowid,
        "name": name,
        "email": email,
        "password": password
    }
    return jsonify(new_user), 201

3、用户登录接口

接口描述:验证用户提供的邮箱和密码是否正确,正确则返回用户信息和认证令牌(简化示例,未实现完整认证令牌生成逻辑),若验证失败,返回相应错误信息。

请求方法:POST

请求 URL/login

请求参数:JSON 格式,包含emailpassword 字段

响应示例:成功时返回用户信息和令牌(此处用简单字符串代替),状态码 200;失败时返回错误信息和状态码 401

@app.route('/login', methods=['POST'])
def login():
    data = request.get_json()
    email = data.get('email')
    password = data.get('password')
    
    if not email or not password:
        return jsonify({"error": "Invalid credentials"}), 401
    
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE email = ? AND password = ?", (email, password))
    user = cursor.fetchone()
    conn.close()
    
    if not user:
        return jsonify({"error": "Invalid credentials"}), 401
    
    # 简化示例,实际应用应生成安全的认证令牌
    token = "dummy_token_for_user_{}".format(user['id'])
    return jsonify({"user": {"id": user['id'], "name": user['name'], "email": user['email']}, "token": token}), 200

4、获取用户信息接口

接口描述:根据用户 ID 查询并返回用户详细信息,若用户不存在,返回相应错误信息。

请求方法:GET

请求 URL/users/<int:user_id>

请求参数:无,通过 URL 路径参数传递用户 ID

响应示例:成功时返回用户信息,状态码 200;失败时返回错误信息和状态码 404

@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
    user = cursor.fetchone()
    conn.close()
    
    if not user:
        return jsonify({"error": "User not found"}), 404
    
    user_info = {
        "id": user['id'],
        "name": user['name'],
        "email": user['email'],
        "password": user['password']
    }
    return jsonify(user_info), 200

5、更新用户信息接口

接口描述:接收用户 ID 和新的用户信息(部分或全部字段),更新数据库中的用户记录,若用户不存在或更新失败,返回相应错误信息。

请求方法:PUT

请求 URL/users/<int:user_id>

api接口开发实例

请求参数:JSON 格式,包含要更新的字段值(如nameemailpassword

响应示例:成功时返回更新后的用户信息,状态码 200;失败时返回错误信息和相应状态码(如 404 表示用户不存在,400 表示请求错误)

@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    data = request.get_json()
    conn = get_db_connection()
    cursor = conn.cursor()
    
    # 检查用户是否存在
    cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
    user = cursor.fetchone()
    if not user:
        return jsonify({"error": "User not found"}), 404
    
    # 更新用户信息
    if 'name' in data:
        cursor.execute("UPDATE users SET name = ? WHERE id = ?", (data['name'], user_id))
    if 'email' in data:
        # 检查新邮箱是否已被其他用户使用(假设邮箱全局唯一)
        cursor.execute("SELECT * FROM users WHERE email = ? AND id <> ?", (data['email'], user_id))
        if cursor.fetchone():
            return jsonify({"error": "Email already in use"}), 409
        cursor.execute("UPDATE users SET email = ? WHERE id = ?", (data['email'], user_id))
    if 'password' in data:
        cursor.execute("UPDATE users SET password = ? WHERE id = ?", (data['password'], user_id))
    conn.commit()
    conn.close()
    
    # 重新查询更新后的用户信息并返回
    cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
    updated_user = cursor.fetchone()
    if updated_user:
        user_info = {
            "id": updated_user['id'],
            "name": updated_user['name'],
            "email": updated_user['email'],
            "password": updated_user['password']
        }
        return jsonify(user_info), 200
    else:
        return jsonify({"error": "Failed to update user"}), 500

6、删除用户接口

接口描述:根据用户 ID 删除指定用户,若用户不存在或删除失败,返回相应错误信息,此操作需谨慎处理,确保数据的完整性和一致性。

请求方法:DELETE

请求 URL/users/<int:user_id>

请求参数:无,通过 URL 路径参数传递用户 ID

响应示例:成功时返回删除结果确认信息,状态码 200;失败时返回错误信息和相应状态码(如 404 表示用户不存在,500 表示服务器内部错误)

@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
    user = cursor.fetchone()
    if not user:
        return jsonify({"error": "User not found"}), 404
    cursor.execute("DELETE FROM users WHERE id = ?", (user_id,))
    conn.commit()
    conn.close()
    return jsonify({"message": "User deleted successfully"}), 200

7、错误处理中间件(可选增强)

功能描述:统一捕获和处理应用程序中的未处理异常,返回友好的错误信息给客户端,避免暴露敏感的内部错误细节,这有助于提高应用程序的安全性和可维护性。

实现方式:可以使用 Flask 的@app.errorhandler 装饰器来定义针对不同 HTTP 错误的处理函数,处理 404 错误和 500 错误:

@app.errorhandler(404)
def not_found(e):
    return jsonify({"error": "Resource not found"}), 404
@app.errorhandler(500)
def internal_server_error(e):
    return jsonify({"error": "Internal server error"}), 500

8、启动应用程序:在文件末尾添加代码以运行 Flask 应用程序,通常在开发环境中使用app.run(),在生产环境中会使用更专业的服务器(如 gunicorn)来部署,这里以开发环境为例:

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

问题与解答栏目示例:

问题 1:如何在上述代码基础上实现用户密码的加密存储?

解答:为了使密码更安全,不应直接存储明文密码,可以使用哈希算法(如 bcrypt)对密码进行加密后再存储到数据库中,在注册和更新用户密码时,先对密码进行加密处理,然后再执行后续的数据库操作,在注册接口中修改密码处理部分代码如下:

import bcrypt
...(省略其他代码)
def register():
    # ...(省略前面的代码)
    password = data['password']
    # 对密码进行加密
    hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
    user_info['password'] = hashed_password.decode('utf-8')
    # 然后执行插入数据库的操作,其余代码不变...

在登录接口中,也需要使用相同的哈希算法对输入密码进行加密后,再与数据库中存储的哈希密码进行比较,这样可以大大提高用户密码的安全性,防止密码泄露风险。

到此,以上就是小编对于“api接口开发实例”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-04-05 23:49
下一篇 2025-04-06 00:09

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信