news 2026/5/1 9:44:20

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/4/25 12:11:38

CO3Dv2三维重建终极实战:从零构建高效视觉系统

CO3Dv2三维重建终极实战:从零构建高效视觉系统 【免费下载链接】co3d Tooling for the Common Objects In 3D dataset. 项目地址: https://gitcode.com/gh_mirrors/co/co3d 在三维视觉技术快速发展的今天,如何选择合适的数据集和工具链成为开发者…

作者头像 李华
网站建设 2026/5/1 6:04:07

Pympress:专业演示者的双屏PDF阅读器终极指南

Pympress:专业演示者的双屏PDF阅读器终极指南 【免费下载链接】pympress Pympress is a simple yet powerful PDF reader designed for dual-screen presentations 项目地址: https://gitcode.com/gh_mirrors/py/pympress Pympress是一款专为演示场景设计的强…

作者头像 李华
网站建设 2026/5/1 6:56:34

巡风漏洞扫描系统:企业内网安全的终极防护利器

巡风漏洞扫描系统:企业内网安全的终极防护利器 【免费下载链接】xunfeng ysrc/xunfeng 是一个用于 Go 语言开发的 Web 框架。适合在 Go 语言开发的 Web 应用中使用,提供丰富的中间件和模块化架构。特点是提供了简洁的 API、自动化路由和易于扩展的插件体…

作者头像 李华
网站建设 2026/5/1 5:06:48

(Open-AutoGLM月活奇迹背后):中国自研大模型如何打破增长瓶颈

第一章:Open-AutoGLM月活奇迹的崛起 在生成式AI快速演进的浪潮中,Open-AutoGLM以惊人的用户增长曲线成为开源社区关注的焦点。其月活跃用户数在发布后的三个月内突破百万,展现出强大的技术吸引力与社区凝聚力。这一现象的背后,是…

作者头像 李华
网站建设 2026/5/1 5:03:49

Promise 对象:优雅解决回调地狱

在现代 JavaScript 编程中,异步操作无处不在,例如网络请求、文件读取等。早期,处理异步操作主要依靠回调函数,但随着业务逻辑变得复杂,回调函数嵌套会形成所谓的“回调地狱”,使代码难以阅读和维护。Promis…

作者头像 李华
网站建设 2026/5/1 7:35:58

微信小程序即时通讯功能快速集成终极指南

微信小程序即时通讯功能快速集成终极指南 【免费下载链接】wechat-im 微信小程序即时通讯模板,使用WebSocket通信 项目地址: https://gitcode.com/gh_mirrors/we/wechat-im 想要为你的微信小程序添加专业级聊天功能吗?wechat-im模板让即时通讯集成…

作者头像 李华