如何在 Web 项目中组织 URL
How to organize URLs in web projects
有很多资源概述了应该如何为 RESTful API 组织 URL,但对于一般的网络来说,几乎找不到。
我如何构造网页的 URL,使它们
- 从用户浏览网页的角度来看是明智的
- 在 Spring 框架控制器中分离关注点是明智的
要应用一些上下文,我们假设有 groups
包含 elements
,并且存在用于创建、查看、编辑和删除两者的用例。
您可能很难找到相关信息,因为除了应用程序设计之外,这个问题还涉及 Information Architecture (IA) and SEO。如果您的应用程序或站点可在 Internet(而不是内部专用网络)上使用,那么您必须优化多个有时相互冲突的约束:
- 使 url 对用户而言合理且易于理解
- 使您的方案易于管理和扩展
- 了解您的应用程序或网站的哪些部分需要被搜索引擎编入索引
- 保持良好的应用程序设计(思考 SOLID)
- 可能还有其他几个...
一般来说,我建议您先确定您的约束条件,然后将 "what makes sense to users" 视为高优先级约束条件。然后尝试从那里在其他约束条件下工作。由于您提到了关注点分离,因此您很清楚您的一些设计约束是什么。最终,由您(也许还有您的中小企业)决定哪些限制需要严格,哪些限制可以放宽。
经过深思熟虑,我想到了这个
/groups/create
/group/{gid}/
/group/{gid}/edit
/group/{gid}/delete
/group/{gid}/elements/create
/group/{gid}/element/{eid}/
/group/{gid}/element/{eid}/edit
/group/{gid}/element/{eid}/delete
唯一的缺点是群组是针对 /groups/create
而不是 /group/create
创建的,否则群组名称 create
将变得非法。
另一种变体是在最后附加 id
,但 url 很快变得笨拙
/groups/create
/groups/view/{id}
/groups/edit/{id}
/groups/delete/{id}
/groups/view/{id}/element/create
/groups/view/{id}/element/view/{eid}
/groups/view/{id}/element/edit/{eid}
/groups/view/{id}/element/delete/{eid}
有很多资源概述了应该如何为 RESTful API 组织 URL,但对于一般的网络来说,几乎找不到。
我如何构造网页的 URL,使它们
- 从用户浏览网页的角度来看是明智的
- 在 Spring 框架控制器中分离关注点是明智的
要应用一些上下文,我们假设有 groups
包含 elements
,并且存在用于创建、查看、编辑和删除两者的用例。
您可能很难找到相关信息,因为除了应用程序设计之外,这个问题还涉及 Information Architecture (IA) and SEO。如果您的应用程序或站点可在 Internet(而不是内部专用网络)上使用,那么您必须优化多个有时相互冲突的约束:
- 使 url 对用户而言合理且易于理解
- 使您的方案易于管理和扩展
- 了解您的应用程序或网站的哪些部分需要被搜索引擎编入索引
- 保持良好的应用程序设计(思考 SOLID)
- 可能还有其他几个...
一般来说,我建议您先确定您的约束条件,然后将 "what makes sense to users" 视为高优先级约束条件。然后尝试从那里在其他约束条件下工作。由于您提到了关注点分离,因此您很清楚您的一些设计约束是什么。最终,由您(也许还有您的中小企业)决定哪些限制需要严格,哪些限制可以放宽。
经过深思熟虑,我想到了这个
/groups/create
/group/{gid}/
/group/{gid}/edit
/group/{gid}/delete
/group/{gid}/elements/create
/group/{gid}/element/{eid}/
/group/{gid}/element/{eid}/edit
/group/{gid}/element/{eid}/delete
唯一的缺点是群组是针对 /groups/create
而不是 /group/create
创建的,否则群组名称 create
将变得非法。
另一种变体是在最后附加 id
,但 url 很快变得笨拙
/groups/create
/groups/view/{id}
/groups/edit/{id}
/groups/delete/{id}
/groups/view/{id}/element/create
/groups/view/{id}/element/view/{eid}
/groups/view/{id}/element/edit/{eid}
/groups/view/{id}/element/delete/{eid}