首页 > 编程语言 >RESTful API 简介(Python示例)

RESTful API 简介(Python示例)

时间:2024-12-05 12:31:43浏览次数:10  
标签:HTTP users 示例 Python 用户 API user 资源

RESTful API 是一种基于 REST(Representational State Transfer,表述性状态转移) 架构风格的接口设计方法。它通过 HTTP 协议提供对资源的访问和操作,具有简单、高效和可扩展的特点。

REST 的核心概念

1. 资源(Resource)

• 资源是 RESTful API 的核心。

• 每个资源用一个唯一的 URL 标识,通常是名词(如用户、商品、订单等)。

• 例如:

        • /users:表示用户资源。

        • /products:表示商品资源。

        • /orders/123:表示订单资源,具体到订单 ID 为 123。

2. HTTP 方法

RESTful API 使用 HTTP 方法 来定义对资源的操作,常见的有:

HTTP 方法 操作 RESTful 含义 示例 URL

GET 读取资源 查询资源或资源集合 /users(所有用户)/users/1(用户 ID 为 1)

POST 创建资源 在资源集合中添加新资源 /users(创建新用户)

PUT 更新资源 更新资源的全部内容 /users/1(更新用户 ID 为 1)

PATCH 部分更新资源 更新资源的部分内容 /users/1(部分更新)

DELETE 删除资源 删除指定的资源 /users/1(删除用户 ID 为 1)

3. 状态码

HTTP 状态码用来描述请求的结果状态:

状态码 含义 描述

200 成功 表示请求成功并返回数据。

201 已创建 表示资源已成功创建(常用于 POST)。

204 无内容 表示操作成功,但不返回任何内容(如 DELETE)。

400 错误请求 表示客户端请求无效(如参数错误)。

401 未授权 表示需要身份验证。

404 未找到 表示资源不存在。

500 服务器错误 表示服务器端的错误。

4. URL 结构设计

• 资源路径通常用 名词 表示。

• 路径使用层级结构来反映资源之间的关系。

• 避免在 URL 中使用动词(操作由 HTTP 方法决定)。

示例:

• /users:获取用户列表。

• /users/123:获取 ID 为 123 的用户。

• /users/123/orders:获取用户 ID 为 123 的所有订单。

RESTful API 的特点

1. 无状态性

• 每个请求都是独立的,服务器不保存任何客户端状态。

• 客户端需要在每次请求时提供必要的信息(如认证令牌)。

2. 统一接口

• 使用统一的接口(如 URL + HTTP 方法)对资源进行操作,接口易于理解和使用。

3. 可缓存性

• RESTful API 可以利用 HTTP 的缓存机制提高性能。

4. 分层系统

• 允许通过中间层(如负载均衡器、代理服务器)分离客户端和服务器,提高系统的可扩展性。

RESTful API 的示例

假设你在开发一个用户管理系统,资源是 “用户”(users)。

1. API 示例

操作 HTTP 方法 URL 描述

获取所有用户 GET /users 返回所有用户的信息。

获取单个用户 GET /users/1 返回用户 ID 为 1 的信息。

创建新用户 POST /users 创建一个新用户。

更新用户信息 PUT /users/1 更新用户 ID 为 1 的信息。

删除用户 DELETE /users/1 删除用户 ID 为 1。

RESTful API 的实现(示例代码:Flask)

1. 环境准备

安装 Flask:

pip install flask

2. 示例代码

from flask import Flask, jsonify, request

app = Flask(__name__)

# 模拟数据
users = [
    {"id": 1, "name": "Alice"},
    {"id": 2, "name": "Bob"}
]

# 获取所有用户
@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

# 获取单个用户
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = next((u for u in users if u['id'] == user_id), None)
    if user:
        return jsonify(user)
    return jsonify({"error": "User not found"}), 404

# 创建新用户
@app.route('/users', methods=['POST'])
def create_user():
    data = request.get_json()
    new_user = {"id": len(users) + 1, "name": data.get("name")}
    users.append(new_user)
    return jsonify(new_user), 201

# 更新用户
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    user = next((u for u in users if u['id'] == user_id), None)
    if user:
        data = request.get_json()
        user["name"] = data.get("name", user["name"])
        return jsonify(user)

    return jsonify({"error": "User not found"}), 404

# 删除用户
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    global users
    users = [u for u in users if u['id'] != user_id]
    return '', 204

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

3. 测试 API

• 使用工具(如 Postman)或命令行工具(如 curl)测试上述接口:

curl http://127.0.0.1:5000/users

curl -X POST -H "Content-Type: application/json" -d '{"name": "Charlie"}' http://127.0.0.1:5000/users

RESTful API 的优缺点

优点

1. 简单易用:基于 HTTP 协议,开发和测试门槛低。

2. 灵活扩展:设计良好的 API 可以轻松扩展和复用。

3. 跨平台支持:客户端可以是任何语言或框架(如 Python、JavaScript、Java 等)。

缺点

1. 无状态性限制:需要客户端每次都发送完整的上下文信息。

2. 性能问题:频繁的 HTTP 请求可能带来性能开销。

总结

RESTful API 是一种简洁、高效的接口设计方法,广泛用于现代 Web 开发。通过合理的 URL 设计、HTTP 方法的正确使用和状态码的规范化,RESTful API 能够提供直观且一致的资源访问方式,非常适合构建现代化的分布式系统和微服务架构。

标签:HTTP,users,示例,Python,用户,API,user,资源
From: https://blog.csdn.net/u013039977/article/details/144205535

相关文章

  • 蓝桥杯备考冲刺必刷题(Python) | P152 反倍数
    学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。附上汇总贴:蓝桥杯备考冲刺必刷题(Python)|汇总-CSDN博客【题目描述】给定三个整数a,b,c,如果一个整数既不是α的整数倍也不是b的整数倍还不是c的整数倍,则这个数称为反倍数。请问在1至n中有多少个......
  • 蓝桥杯备考冲刺必刷题(Python) | 128 冰雹数
    学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。附上汇总贴:蓝桥杯备考冲刺必刷题(Python)|汇总-CSDN博客【题目描述】任意给定一个正整数N,如果是偶数,执行:N/2;如果是奇数,执行:Nx3+1,生成的新的数字再执行同样的动作,循环往复。通过观察发现,这个......
  • python语言基本数据类型
    在内存中可以使用多种类型存储数据,例如,存储一个人名字可以用字符型,存储年龄可以用数值型,存储一个人的性别可以用布尔类型等。这些都是Python中提供的基本数据类型。一、数字数字类型主要包括整数、浮点数和负数。整数整数又包括十进制整数八进制整数:由0~7组成,逢八进一,......
  • 【python自动化三】allure测试报告优化
    前文中讲了如何集成allure测试报告,但生成的测试报告比较简单可以看到无论是主页还是具体用例页面,内容都比较少,无法看到更具体的内容,这里我们丰富一下测试报告1.添加allure相关的装饰器装饰器说明@allure.epic()场景范围,直译为史诗,就是一个比较大的场景范围@allure.feat......
  • 在 docker 容器中运行 python 程序,报错:"RuntimeError: can't start new thread"
    具体报错信息如下所示:Traceback(mostrecentcalllast):File"/usr/local/lib/python3.12/site-packages/uvicorn/protocols/http/h11_impl.py",line406,inrun_asgiresult=awaitapp(#type:ignore[func-returns-value]^^^^^^^^^^^^^^^^^^......
  • Python入门:从零基础到精通的详细教程(0广告,纯干货)
    前言:在信息技术飞速发展的今天,掌握编程语言的运维工程师与那些尚未涉足编程领域的运维工程师,仿佛生活在两个截然不同的世界。本博主深感这一鸿沟之深远,因此决定倾力打造一系列详尽至极的Python从零到精通教程,旨在帮助更多运维人员跨越这一技术壁垒。本系列教程将分为三大阶......
  • 深入理解Python中的装饰器
    前言作为一名程序员,我们常常会遇到需要重复使用的代码段。为了提高代码的可读性和重用性,Python引入了装饰器(Decorator)这一强大的工具。装饰器可以在不修改函数源代码的情况下,为函数添加新的功能。本文将详细讲解Python中装饰器的使用方法及其实现原理。什么是装饰器?装饰......
  • 【最新原创毕设】基于SpringBoot的网上报修平台+94800(免费领源码)可做计算机毕业设计JA
    摘要随着信息技术的快速发展和普及,高校宿舍管理面临着诸多挑战与机遇。传统的宿舍管理模式,如手工记录报修信息、纸质文档管理等,已无法满足现代高校对效率和便捷性的需求。因此,开发一套高效、智能的网上报修平台显得尤为重要。基于springBoot的网上报修平台的设计和实现正......
  • python带翻页blbl视频爬虫程序代码QZQ
    importsubprocessdefdownload_bilibili_video(video_url):try:#使用you-get下载视频,-o指定输出目录(这里是当前目录)subprocess.run([‘you-get’,‘-o’,‘.’,video_url],check=True)print(“视频下载成功!”)exceptsubprocess.CalledProcessErrorase:print......
  • centos7 python3.9.10 报错 No module named _ssl
    配置openssltar-zxvfopenssl-1.1.1w.tar.gzcdopenssl-1.1.1w/./config--prefix=/usr/local/openssl--openssldir=/usr/local/opensslmakemakeinstallmv/usr/bin/openssl/usr/bin/openssl_backupln-s/usr/local/openssl/bin/openssl/usr/bin/opensslln-s/......