# 第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后哪些业务设计保持不变。