API 设计:移除未使用的 CRUD 服务

Posted

技术标签:

【中文标题】API 设计:移除未使用的 CRUD 服务【英文标题】:API design: Remove unused CRUD service 【发布时间】:2021-09-25 11:59:42 【问题描述】:

我目前是一个 Web 服务的支持者,该服务有多个支持 CRUD 操作的资源。我发现对于某些资源,其中一些操作(但不是同时所有四个)未被消费者使用。

以下哪一项应该是首选?

    删除未使用的端点,因为未使用的代码会导致维护成本和 YAGNI。 保持 API 不变,因为更重要的是拥有完整的操作集(GET、PUT、POST、DELETE),这使得处理资源更加愉快,如果它只是为了一些手动测试。

【问题讨论】:

【参考方案1】:

对此很难给出一个一般性的答案,但我通常会删除未使用且没有计划的代码。

更多代码是错误和安全问题的更大表面积。维护代码不是免费的。

【讨论】:

【参考方案2】:

更重要的是拥有完整的操作集(GET、PUT、POST、DELETE)

拥有一整套操作并不是特别重要。事实上,HTTP specification 中记录了大多数资源不支持 DELETE

相对较少的资源允许使用 DELETE 方法——它的主要用途是远程创作环境,用户对其效果有一定的指导。


如果只是为了一些手动测试。

测试和运营是支持不直接增加收入的资源和运营的完全正当理由。

还有:cool URI don't change。向后兼容性是 REST 架构风格中的一个重要理念,消费者对 Web 的看法不应该无缘无故地破坏。

在取消对某项操作的支持时,您需要注意的一件事是了解客户是否因为不需要该操作而不使用该操作,或者他们是否因为需要该操作而没有使用该操作它不经常出现。

【讨论】:

【参考方案3】:

在我看来,如果您认为未使用的方法会产生错误,请删除或注释代码。您可以在需要时查看这些内容。只保留您需要的资源。

【讨论】:

以上是关于API 设计:移除未使用的 CRUD 服务的主要内容,如果未能解决你的问题,请参考以下文章

如何为 LOB 应用程序中的多个视图设计 REST API

CRUD全栈式编程架构之服务层的设计

我想用gin开发一个使用redis和数据库的系统。 我应该如何进行架构设计?

微服务 - 每个 CRUD 是不是提供一项服务

移除重复节点

springboot的服务端Restful风格 API接口,在不同场景下,设置不同的请求及传参方式的设计,及其他异常场景解决方案