news 2026/2/5 13:40:23

URL 设计规范

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
URL 设计规范

RESTful API 中的 URL 设计规范(最佳实践)

URL(Uniform Resource Identifier)是 RESTful API 的核心入口,良好的 URL 设计能让 API直观、可预测、易维护。以下是业界广泛认可的 URL 设计规范和最佳实践。

1. 核心原则总结(口诀)

“资源用名词、复数形式、层级清晰、动词靠方法、版本要明确、查询用参数”

2. 详细规范表
规范类别推荐做法示例不推荐示例原因说明
资源命名使用名词表示资源(避免动词)/users/articles/getUsers/createArticle动词应由 HTTP 方法表达
复数 vs 单数统一使用复数形式(业界主流约定)/users/orders/user/order更一致,便于集合和单个资源统一处理
层级结构用路径表示资源的从属关系(嵌套不超过 2-3 层)/users/123/orders/getUserOrders?id=123更直观,体现资源层次
子资源操作子资源用嵌套路径/articles/123/comments/comments?articleId=123更 RESTful(可选,视场景)
动作非资源时如果是动作而非资源,用动词放在路径末尾(谨慎使用)/orders/123/cancel大多数情况应转为资源设计只在无法建模为资源时使用
版本控制在 URL 中显式指定版本(最常见方式)/v1/users/api/v2/articles无版本或只用 Header更直观,便于文档和客户端切换
大小写与分隔符全小写,用连字符 -分隔(kebab-case)/blog-posts/user-profiles/blogPosts(camelCase)URL 区分大小写,小写更安全、可读性更好
文件扩展名避免在 URL 中使用 .json、.xml 等扩展名/users/123/users/123.json内容协商用 Accept Header 处理
ID 命名{id}占位符(文档中),实际用具体 ID/users/{id}(文档)
/users/123(实际)
/users/userId=123更简洁
查询参数用于过滤、排序、分页、搜索等/articles?tag=rest&page=2&limit=20&sort=created_at:desc把参数放路径查询参数专为此设计
避免过深嵌套嵌套不超过 3 层,过多时用查询参数或扁平化/users/123/orders/456/items(可接受)嵌套 5 层以上过深 URL 复杂、不易维护
3. 常见操作的 URL 示例(用户 + 文章 + 评论)
操作推荐 URLHTTP 方法说明
获取用户列表GET /usersGET支持查询参数过滤
获取单个用户GET /users/123GET
创建用户POST /usersPOST
更新用户(全量)PUT /users/123PUT
部分更新用户PATCH /users/123PATCH
删除用户DELETE /users/123DELETE
获取用户的所有订单GET /users/123/ordersGET嵌套子资源
获取某篇文章的所有评论GET /articles/456/commentsGET
为文章添加评论POST /articles/456/commentsPOST
搜索文章GET /articles/search?q=restfulGET或直接用/articles?q=restful
获取当前登录用户信息GET /meGET /users/meGET常见特殊路径
4. 特殊场景处理建议
场景推荐设计方式示例
分页用查询参数pagelimitoffsetlimit/articles?page=3&limit=20
排序sort参数,支持字段+方向/users?sort=-created_at,name
过滤用查询参数,直接字段名或特定前缀/orders?status=paid&min_amount=100
批量操作单独路径(非标准 REST,但实用)POST /users/batch-delete(Body: [1,2,3])
文件上传用资源路径 + multipart/form-dataPOST /users/123/avatar
触发动作(如支付)优先建模为资源(如创建支付订单),否则用动词路径POST /orders/123/pay(谨慎使用)
5. 常见反模式(避免)
  • 把 HTTP 方法放进 URL:/users/getAll/users/addUser
  • 混用单复数:项目中既有/user又有/articles
  • 过长 URL:嵌套太多层或参数太多
  • 用查询参数做主要操作:GET /users?action=delete&id=123(应为 DELETE)
  • 无版本控制,导致旧客户端无法兼容
6. 总结

优秀的 URL 设计应该做到:

  • 一眼看出资源和关系
  • 无需文档也能猜到大部分接口
  • 前后一致、易于扩展

遵循以上规范,你的 RESTful API 将更专业、更易被开发者接受和使用。

如果你想看具体框架(如 Express、Spring Boot、FastAPI)的路由实现示例,或者某个复杂场景的 URL 设计讨论,随时告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 4:05:45

如何快速掌握JSONPath:面向开发者的完整查询指南

如何快速掌握JSONPath:面向开发者的完整查询指南 【免费下载链接】jsonpath-online-evaluator JSONPath Online Evaluator 项目地址: https://gitcode.com/gh_mirrors/js/jsonpath-online-evaluator 在现代数据驱动的开发环境中,高效处理JSON数据…

作者头像 李华
网站建设 2026/1/31 13:04:52

70万中文对联数据集实战应用全解析

70万中文对联数据集实战应用全解析 【免费下载链接】couplet-dataset Dataset for couplets. 70万条对联数据库。 项目地址: https://gitcode.com/gh_mirrors/co/couplet-dataset 对联数据集作为中文自然语言处理的重要资源,为seq2seq模型训练提供了丰富的语…

作者头像 李华
网站建设 2026/2/1 16:24:38

为什么你的Open-AutoGLM跑不起来?Mac环境配置常见问题TOP6详解

第一章:Open-AutoGLM mac部署在 macOS 系统上本地部署 Open-AutoGLM 可充分发挥其自动化代码生成与自然语言理解能力。该模型依赖 Python 环境及必要的深度学习框架支持,推荐使用 Conda 管理虚拟环境以避免依赖冲突。环境准备 确保已安装 Python 3.9 或更…

作者头像 李华
网站建设 2026/2/3 5:02:26

PaddlePaddle镜像与CI/CD流水线集成的方法论

PaddlePaddle镜像与CI/CD流水线集成的方法论 在AI模型日益频繁地进入生产环境的今天,一个棘手的问题始终困扰着算法工程师和运维团队:为什么本地训练好好的模型,一上服务器就报错?CUDA版本不匹配、Python依赖冲突、甚至某个库的微…

作者头像 李华
网站建设 2026/1/29 17:36:03

终极Google Drive下载实用手册:gdown完全指南

还在为Google Drive大文件下载烦恼吗?当你使用curl或wget时遇到安全警告无法下载,gdown就是你的救星。这个Python工具专门解决Google Drive下载难题,让你轻松掌握高效下载技巧。 【免费下载链接】gdown Download a large file from Google Dr…

作者头像 李华
网站建设 2026/2/4 8:27:19

中文分词实战:从入门到精通的全场景解决方案

中文分词实战:从入门到精通的全场景解决方案 【免费下载链接】pkuseg-python pkuseg多领域中文分词工具; The pkuseg toolkit for multi-domain Chinese word segmentation 项目地址: https://gitcode.com/gh_mirrors/pk/pkuseg-python 还在为中文文本处理中…

作者头像 李华