PHP url";获得;参数处理:响应用户错误的最有用和最可维护的设计是什么?
考虑一个自动构建系统,它将结果存储在数据库中,并通过动态html响应http请求提供结果的表格显示。许多不同的用户希望看到结果的不同子集,因此PHP中有解析脚本,每个脚本都接受多个可选的过滤参数和值。例如,(我省略了http部分,因此这里没有人实际单击此示例URL): 显示\u results.php?组件\u name=my\u comp1&build\u type=build\u type1&build\u owner=fred 即使在某些帮助页面上列出了所有可能参数及其允许值的列表,当用户创建请求URL时,他/她可能手头没有该文档。相反,这取决于记忆有效参数(包括它们的拼写)和允许的值。有时他/她会弄错 问题 从最终用户可用性和开发人员可维护性的角度来看,以下哪种选项最能应对此类用户错误:PHP url";获得;参数处理:响应用户错误的最有用和最可维护的设计是什么?,php,error-handling,usability,Php,Error Handling,Usability,考虑一个自动构建系统,它将结果存储在数据库中,并通过动态html响应http请求提供结果的表格显示。许多不同的用户希望看到结果的不同子集,因此PHP中有解析脚本,每个脚本都接受多个可选的过滤参数和值。例如,(我省略了http部分,因此这里没有人实际单击此示例URL): 显示\u results.php?组件\u name=my\u comp1&build\u type=build\u type1&build\u owner=fred 即使在某些帮助页面上列出了所有可能参数及其允许值的列表,当用户
谢谢@pygorex1!您给出的答案将我的问题置于一个著名的软件结构——API的上下文中。并就违反这些原则的影响给出了一个很好的例子(也许有些夸张)。最后,这些脚本的API一直困扰着我,当你提到“自我文档化”时,你帮我连接了它。让我困扰的是,当文档很少(因为更新成本很高)并且在用户错误(我的!)时返回部分结果时,我对系统一无所知。“自我记录”可能是您推荐的错误处理设计最简洁的理由。更容易销售给用户和维护人员 如果是我,我会显示尽可能多的有效信息,在错误消息中列出无效参数,然后提供未包含在“有效信息”部分的有效参数列表。
可能是每个有效参数的一个表单,其中包含一个关联的输入字段。然后,AJAX可能会在新的有效信息发生变化时出现。我的第一反应是为URL创建一个构建页面,而不是让用户胡乱处理。除非有任何原因,你不能有一个建设者页面,这是我的建议。这样,您就不必处理通知用户更改的问题。在某些情况下,您还可以选择仅显示有效选项 根据部署中应用程序的预期行为,我建议跳转到400错误请求,或仅使用提供的数据显示结果集,并显示某种标志,通知用户某些限制参数已被忽略 您必须评估返回的数据的特殊性,以及是否必须始终返回数据集以代替错误。如果这是一个仅为用户使用而收集数据的应用程序,例如搜索目录,那么使用提供的参数并仅限制这些参数当然是可以接受的
然而,出于安全考虑,许多大型web应用程序(例如Amazon)将确保包含所有参数,以迫使用户在站点中使用UI组件,而不是篡改url(因为篡改url的人通常没有最佳意图)如果删除node参数或ie参数(这决定了要显示的字符集),可以在Amazon上看到一些示例。使用省略或伪造的参数跳转请求可以很好地保持对不需要的输入的控制。这听起来非常像API。一个好的API的一个特点是具有清晰一致的语法,这样用户就可以得到可预测的结果。违反语法将导致错误 即使语法不正确也返回部分结果是一种糟糕的设计:当用户没有清楚地说明他们想要什么数据时,就会出现错误