Files
PythonLearn/05_web基础/5_6_HTTP接口调试与综合实践/practice.py
T

57 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第5-6课练习:HTTP接口调试与综合实践
#
# 本文件只提供题目、预期结果、自查清单和验收标准,不包含参考答案或代码骨架。
# 综合任务:设计并调试图书管理HTTP接口
#
# 第一部分:接口设计
# 1. 设计查询图书列表、查询详情、新增、局部修改和删除接口。
# 2. 列表接口支持keyword和page查询参数。
# 3. 为每个接口写出方法、路径、请求体、成功状态码和失败状态码。
# 4. 不需要连接数据库,可以使用内存列表保存本次运行的数据。
# 第二部分:服务端实现
# 1. 使用http.server实现GET /books和GET /books/{id}。
# 2. 实现POST /books,接收JSON格式的title与author。
# 3. 校验JSON格式和必填字段,返回合理的4xx状态码。
# 4. 创建成功返回201、图书JSON和Location响应头。
# 5. 未知路径返回404;服务器只绑定127.0.0.1和随机端口。
# 第三部分:客户端调试
# 1. 使用urllib.request依次调用列表、详情、新增和未知路径。
# 2. 输出请求方法、完整URL、状态码、Content-Type和响应体。
# 3. 额外发送一次无效JSON或缺少书名的请求,检查错误响应。
# 4. 使用try/finally保证测试完成或失败后都关闭服务器。
# 预期关键结果:
# 1. 初始列表至少包含一条图书;
# 2. 新增接口返回201和新图书编号;
# 3. 再次查询列表能够看到新增图书;
# 4. 查询不存在的编号返回404;
# 5. 缺少必填字段返回400或422;
# 6. 最终输出“本地服务已关闭”。
# 自查清单:
# 1. 服务是否只监听127.0.0.1,而不是暴露到局域网?
# 2. Content-Length是否按UTF-8字节长度计算?
# 3. JSON响应是否声明application/json与UTF-8?
# 4. 是否区分JSON语法错误、字段错误和资源不存在?
# 5. 客户端是否同时检查状态码、响应头和响应体?
# 6. 是否在finally中关闭服务并等待线程结束?
# 7. 是否能画出客户端、HTTP服务、业务数据之间的调用方向?
# 最终验收标准:
# 1. practice.py通过语法检查并能连续运行两次;
# 2. 完成至少两个GET接口和一个POST接口;
# 3. 新增后列表数据发生预期变化;
# 4. 成功与失败响应的状态码和JSON结构合理;
# 5. 不访问公网、不连接生产数据库、不长期占用固定端口;
# 6. 能使用接口调试工具复现同样请求;
# 7. 能解释这些接口迁移到FastAPI后哪些业务设计保持不变。