REST 资源与 API 契约设计
RESTful API、JWT 与权限认证#Python全栈#第十三阶段#RESTful API、JWT 与权限认证#REST 资源与 API 契约设计约 1279 字 · 4 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
本阶段学习说明
整体培养方向: Python 全栈开发就业,按北京 10~20k 岗位所需能力逐步推进。
本阶段定位: 承接 HTTP、Flask、Django 与 FastAPI,学习资源接口设计、登录认证、JWT 令牌、权限模型和安全联调,形成可供前端和第三方调用的 API。
适用环境: Python Web 框架、Pydantic、OAuth 2.0 Bearer 约定与 JWT(RFC 7519);具体签名库、算法、存储和部署方式应锁定版本并经过安全评审。示例凭据均使用教学值。
考查目标: 能设计清晰的资源接口,区分身份认证与权限授权,验证和轮换令牌,处理注销、过期、并发与越权,并通过请求记录和测试样例证明安全边界。
题库结构: 100 道题,每题包含追问;覆盖 REST 资源设计、错误契约、密码与令牌、角色权限、租户数据范围、前端联调和综合实操。本阶段提供题目,不包含参考答案。OAuth 授权服务器、单点登录、复杂策略引擎和生产密钥管理作为进阶方向,题目先建立可落地的应用级认证能力。
答题约定: 先说明资源、主体、凭据位置、请求方法、状态码和失败场景,再解释实现;区分“令牌签名有效”“用户仍存在”“资源允许访问”三个判断。JWT 默认是可解码的签名载荷,不要当作加密容器;涉及浏览器 Cookie、Local Storage、刷新令牌和撤销时,说明威胁、生命周期及前后端约束。
REST 风格 API 主要围绕什么组织接口?
追问 题目、分类和练习记录分别可视为哪些资源?为什么不宜把所有操作都设计成
/doSomething?集合资源、单个资源与嵌套资源如何表示?
追问
/questions、/questions/{id} 与用户练习记录的 URL 如何选择,怎样避免嵌套路径过深?资源名称、URL 斜杠和版本前缀应如何约定?
追问 单复数、大小写、
/api/v1 与媒体类型版本各有什么取舍?如何保证一套规范在项目中一致?GET、POST、PUT、PATCH 与 DELETE 在资源 API 中怎样使用?
追问 创建、完整替换、部分修改和删除如何表达?方法选择除了参数位置,还要考虑什么语义?
列表接口应返回数组还是包含元信息的对象?
追问 分页、总数、游标、下一页链接和筛选条件怎样设计?如何避免客户端必须猜测字段含义?
API 的请求与响应字段命名如何统一?
追问 Python snake_case 与前端 camelCase 怎样处理?自动别名转换时如何保持文档、输入和输出一致?
资源创建成功后应返回哪些信息?
追问 状态码、资源标识、Location、完整表示和异步任务标识如何组合?为什么不应返回数据库内部对象的全部字段?
API 错误响应应包含哪些稳定字段?
追问 错误类型、公开消息、字段位置、追踪 ID 和可重试提示如何区分?为什么不要把 Python 堆栈直接返回客户端?
如何设计可向后兼容的 API 变更?
追问 新增可选字段、删除字段、修改枚举和改变错误结构分别有什么风险?怎样记录弃用周期和迁移说明?
REST 风格与 RPC 风格什么时候可能各有优势?
追问 资源 CRUD 与“批量导入”“重新生成报告”等动作怎样选择表达,避免为了形式而牺牲业务可理解性?