如何落地业务建模
徐昊
Thoughtworks 中国区 CTO
24830 人已学习
新⼈⾸单¥68
登录后,你可以任选2讲全文学习
课程目录
已完结/共 32 讲
如何落地业务建模
15
15
1.0x
00:00/00:00
登录|注册

说点题外话04|面向对象的原则适用于RESTful API吗?

大势下的企业架构现代化
客户端变得像浏览器
开放性和扩展性
对互联网架构的反思
公约降低客户端对API供应者的了解
避免客户端拼凑URI
超媒体明确表示资源关联
适用性讨论
面向对象设计中的实体交互
最小可知法则
在RESTful架构下的体现
RESTful API的主流地位
RESTful API的质疑
RESTful架构风格
HTTP语义约定
HATEOAS
迪米特法则
面向对象原则与最佳实践
RESTful API

该思维导图由 AI 生成,仅供参考

你好,我是徐昊。今天我们再来专门说点题外话。
前面几期题外话都比较偏向于提供一种不同的角度,主要是因为你们也并没有针对课程的内容,提出什么特别的问题需要我来具体回答。那么作为我们在进入新约前的最后一篇题外话,我想聊一聊关于 RESTful API 的问题。
我记得有位同学在留言区问了这样一个问题:过长的 URI 是否破坏了迪米特法则(Law of Demeter)。这里我们就要搞清楚,什么是迪米特法则呢?
迪米特法则又叫最小可知法则,指的是在面向对象设计中,实体应尽可能少地与其他实体发生交互。为了说明什么是“少的交互”,我们还特别归纳了一组可以认为不违反迪米特法则,并且可以直接调用的对象:
当前对象自己(this,self);
以参数形式传入的对象,比如函数的形参(parameter);
当前对象内实例变量引用的对象(instance variable);
如果实例变量是集合,那么集合中的对象也可以访问(collection,aggregration);
由当前对象创建的对象(variable declaration in function)。
那么这些场景适用于 RESTful API 调用的场景吗?显然并不太适用。因为在 RESTful API 的场景中,实体只有客户端和 API 提供者,而 API 提供者的内在结构都被 API 层屏蔽了。所以无论怎么调用,都不会出现对于 API 提供者内部结构的依赖。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

徐八叉在文章中探讨了面向对象的原则在RESTful API中的适用性。他首先解释了迪米特法则,并指出在RESTful API的场景中,实体只有客户端和API提供者,而API提供者的内在结构都被API层屏蔽了。因此,迪米特法则在这种情况下并不太适用。然后,他提出通过超媒体明确地表示资源之间的关联,以及按照HTTP语义约定设计API,可以帮助遵循迪米特法则。此外,他讨论了HATEOAS的作用,指出RESTful API的核心是开放性和扩展性,与企业应用的客户端与服务器架构有所不同。最后,徐八叉强调了RESTful API、MicroService、企业内生态等在企业架构现代化中的重要性。文章提供了对RESTful架构下面向对象原则与最佳实践的思考,引发了对这一话题的深入思考和讨论。 在RESTful架构下,面向对象原则与最佳实践体现在对迪米特法则的重新思考,以及通过超媒体和HTTP语义约定设计API来降低客户端对API提供者的知识依赖。此外,RESTful API的核心开放性和扩展性与传统企业应用的架构有所不同,这也是面向对象原则在RESTful架构下的体现之一。这些观点为读者提供了对RESTful API设计的新思路和理念,对于理解和应用RESTful架构具有重要的指导意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《如何落地业务建模》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 邹溪源
    接口无处不在,而良好的设计则更显得非常重要。基于restful的架构风格设计接口,相比传统的http风格设计的接口,更易于引入面向对象的程序设计。这种设计也成为实践单一职责原则的练兵场。 而有了接口,也使得依赖倒置成为一种基本操作。

    作者回复: 面向对象不面向对象单说 比较容易得到稳定的api

    2021-07-27
    2
  • 阿鸡
    想请问下SOA能使用面向对象的原则吗? 还是只能在服务内部面向对象,在服务边界还是传统的DO加XxService的形态

    作者回复: 跨进程边界无法用面向对象

    2021-08-01
    1
  • 海连天
    老师怎么看GraphQL
    2022-03-03
    2
  • 老敖
    “比如通过超媒体明确地表示资源之间的关联,而不是依靠客户端去拼凑 URI。如果客户端可以拼凑出 URI,则表明客户端对于 API 提供者的内在逻辑存在依赖。而通过 HATEOAS,把所有关联的链接直接提供,就避免了暴露内在的逻辑。”这段话多少有点耍流氓了,按这个逻辑,不穿衣服上街就没人能强奸我了?
    2022-12-09归属地:北京
  • aoe
    原来 RESTful 还有一个 HATEOAS
    2022-04-09
  • 许凯
    功能和配置一致、单一、完整、正交
    2021-11-01
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部