来自亚马逊的高级工程师James Hood以简单明了的例子说明了为什么要用DDD替代CRUD来设计REST API。 REST以资源为中心,这些资源以URI的形式呈现。在调用HTTP时,通过指定一个HTTP动词和一个资源URI对某个特定的资源进行操作。大部分REST框架都提供了生成器,你只要指定一个资源的名字,框架就会为你生成脚手架(scaffold)。不过,这些生成器默认使用的是CRUD模型(Create、Read、Update、Delete),它们把资源看成是一系列属性的集合,使用JSON或与特定语言相关的数据对象来表示资源,并生成用于对资源进行创建、读取、更新和删除操作的方法。 虽然这给开发者带来了便利,但我觉得这样是有问题的。我不喜欢CRUD这样的说法,尤其不喜欢当中的U。一般的更新操作允许客户端更新资源的任何一个字段,并使用新版本覆盖已有的版本。但如果你允许客户端这么做,那么你的服务API就失去了应有的价值。服务层的一个关键价值在于为底层的数据增加业务约束,因此,资源最终都需要带上业务约束。 |
|