如何在 Web 项目中组织 URL

How to organize URLs in web projects

有很多资源概述了应该如何为 RESTful API 组织 URL,但对于一般的网络来说,几乎找不到。

我如何构造网页的 URL,使它们

  1. 从用户浏览网页的角度来看是明智的
  2. 在 Spring 框架控制器中分离关注点是明智的

要应用一些上下文,我们假设有 groups 包含 elements,并且存在用于创建、查看、编辑和删除两者的用例。

您可能很难找到相关信息,因为除了应用程序设计之外,这个问题还涉及 Information Architecture (IA) and SEO。如果您的应用程序或站点可在 Internet(而不是内部专用网络)上使用,那么您必须优化多个有时相互冲突的约束:

  1. 使 url 对用户而言合理且易于理解
  2. 使您的方案易于管理和扩展
  3. 了解您的应用程序或网站的哪些部分需要被搜索引擎编入索引
  4. 保持良好的应用程序设计(思考 SOLID
  5. 可能还有其他几个...

一般来说,我建议您先确定您的约束条件,然后将 "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}