【问题标题】:Should one trust other developers while implementing an API? [closed]在实现 API 时是否应该信任其他开发人员? [关闭]
【发布时间】:2014-06-01 14:49:20
【问题描述】:

假设您正在开发一个(PHP,但没关系)库,该库在某些时候会被其他开发人员使用。该库很好地覆盖了单元测试,以确保它按预期工作,还测试了一些边缘情况,比如在明显错误的参数上抛出异常(比如传递一个预期标量值的数组等)。是否应该编写更多的单元测试并在代码中构建更多的值检查,以确保永远不会传递无效值并引发异常,同时牺牲性能,或者应该停止并记录允许无意义的值,但不应该没通过?

例如,您编写了一个 URL 类,并且您可以选择允许设置包含无效字符或长度错误等的主机值。您应该允许它并希望其他开发人员永远不会传递错误值,或者您应该编写检查并牺牲性能以支持完整性?

【问题讨论】:

    标签: php unit-testing testing documentation


    【解决方案1】:

    只是一种意见...我认为除非您控制两端,否则您不能信任 API 用户。 如果您不是唯一要使用它的人,您需要确保只有“OK 值”会通过 API 的第一层。 为了防止性能问题,您可以考虑相反的方法(如果它适用于解决方案的需求和实现),而不是搜索所有错误的案例和输入,您可以尝试检查值是否正常,如果没有抛出异常(即,可以使用 REGEX 角色检查主机值以确保它是正确的模式,否则将引发异常)。

    有几个标准\问题可以帮助您做出决定:

    现在和将来谁会使用您的服务?考虑公司扩张甚至收购等场景。

    谁会受到“输入错误”案例的影响?它会仅影响导致它的单个操作,还是可能影响其他未来操作甚至其他用户(例如,导致系统崩溃、将无效数据插入数据库、文件或全局内存等)。

    您能信任将使用您的服务及其数据的人吗?他是否从其他可能已损坏或无效的来源获取数据?

    验证检查的费用是多少?与需要完成的其余工作相比(性能方面)是否昂贵,如果是这样,是否可以更有效地编写它?

    这些问题的答案有助于为特定场景找到正确的解决方案。 我通常使用Defensive programming 方法。

    【讨论】:

    • 这也是我一直在做的事情,白名单检查值是否正常,否则异常。但是,检查相当耗时,并且会影响实际性能。如果其他开发人员坚持 OK 值,这可能根本没有必要,但我不能保证,因此提出了问题。
    • 我更新了我的答案,所以它会更详细
    • 感谢您的更新,您对定义的标准是正确的,对我来说,重点是数据完整性部分,因为如果没有检查可能会导致数据损坏/无效假如。因此,为了确保开发人员不必自己进行检查,这同样昂贵,我宁愿将它们构建到库中以使每个人都开心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2020-02-19
    相关资源
    最近更新 更多