gpt4 book ai didi

language-agnostic - 定义 Web 应用程序 URL 的最佳方式

转载 作者:行者123 更新时间:2023-12-04 07:41:58 25 4
gpt4 key购买 nike

我一直发现,在 Web 应用程序中为其他“页面”定义 URL 似乎笨拙、脆弱或臃肿。

例如您有一个管理客户、销售、潜在客户的应用程序,因此具有以下“页面”。

  • 客户名单
  • 查看客户
  • 编辑客户
  • 添加客户
  • 查看联系人
  • 编辑联系人
  • 添加联系人
  • 潜在客户(x3?x4?)
  • 销售额(x?)
  • 产品(x?)
  • 请求(x?)
  • 预测 (x?)
  • 等...

随着应用程序的增长,页面数量会立即增加到包含 100 多个 URL 的列表。

从逻辑上讲,仅将这些 URL 复制/粘贴到页面上需要的位置是丑陋的,而且维护起来很痛苦,但是如果您在“此”页面上只需要其中的 2 或 3 个,则加载 100 多个键/值似乎是多余的.

从技术上讲,这是一个与语言(ASP、JSP、PHP、RoR、Python 等)无关的问题,但我打算在 PHP 中实现(在 MVC 设置中)。但是,如果 ASP.Net 或 Rails 有一种“非常酷”的方式来做到这一点,我会洗耳恭听。

更新:

我正在将非 MVC PHP 应用程序转换为使用 MVC 结构。以前我有一大组关键链接,它们是页面的基本 URL,例如:

$URLs['CUSTOMER_ORDER_CONTACTS'] = '/customerordercontacts.php';
$URLs['CUSTOMER_PRODUCTS_EDIT'] = '/editcustomerproducts.php';
//etc.

因为我可能从任何地方链接到“客户产品编辑”屏幕,所以每个页面都会加载此列表,因此如果/当 URL 更改为另一个页面时...更改列表中的项目将更新所有链接。

然而,当我阅读此处的答案时,我认为我可能无意中回答了我自己的问题。 @Blixt 写的几乎是我已经/计划遵循的结构...此时 URL 确实是结构化我不根本不需要这个列表:

示例:如果我正在呈现客户...并想提供指向每个联系人的链接

//pseudo code
$contacts = $customer.getContacts();

//previous rendering list of links
foreach($contacts as $key => $value){
echo('<a href="'.$URLs['CUSTOMER_CONTACT_VIEW'].'?customer='.$custID.'&contact='.$key.'">'.$value.'</a>');
}

//new rendering list of links
foreach($contacts as $key => $value){
echo('<a href="/customer/'.$custID.'/contact/'.$key.'">'.$value.'</a>');
}

最佳答案

我希望 URL 尽可能保持逻辑,并避免特定于框架的 URL(考虑到您将来可能会更改框架,然后必须继续使用旧的 URL 模式以避免破坏外部链接。)

基本上:

# All customers:
/customers/
# New customer:
/customers/new
/customers/?new # another version if you don't think "new" deserves its own path
# Existing customer:
/customers/123/
/customers/123 # another version if you want the concept that it's a page, not a
# directory
# Edit customer:
/customers/123/edit
/customers/123?edit

# Some sub-list for a customer:
/customers/123/orders/

# and so on...

老实说,在我提供两个示例的情况下,我个人更喜欢第二个示例。它使用文件系统中的概念,即列表是“目录”,单独的条目是"file"。每条路径代表某种数据,其他路径使用查询字符串(/customers/?new)分隔。

在您决定了您的 URL 结构之后,您应该看看如何在您的网络框架中实现它。我认为“好”的大多数框架都对映射 URL 提供某种支持(通常带有某种支持通配符的模式,例如正则表达式。)所以您的模式可能看起来像这样,使用我的第二个示例(正则表达式):

^/customers/$ -> CustomerList
^/customers/(\d+)$ -> Customer # This will check the query string for "edit" etc
# to determine which mode to use.
^/customers/(\d+)/orders/$ -> OrderList

关于language-agnostic - 定义 Web 应用程序 URL 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1254994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com