OData 是公开非 CRUD API 的好方法吗?

Rip*_*ash 5 c# domain-driven-design web-services odata asp.net-web-api

我正在从事一个项目,这是我们公司首次涉足领域驱动开发。

我们的 Web API 最初只是提供 CRUD 操作,并且项目公开了 OData 控制器,但我不确定这是否仍然是一个好主意。

OData 是公开非 CRUD API 的好方法吗?

更多信息:最初我们的 web api 基本上暴露了 CRUD 函数。要创建一个新用户,您只需创建一个并将其发布到服务。例如,要更改地址,您将获得用户实体的副本,进行更改,然后执行更新操作。基本的 OData 东西。

除了提供查询支持之外,OData 还以一种易于使用的方式公开服务,因此可以将其作为服务引用添加到其他项目中并通过代理进行访问。

自从我们转向 DDD 方法后,情况发生了重大变化。我们的 Web API 现在只是通往许多独立子域服务的网关。我们不再提供 CRUD 操作或对实体的直接访问,而是通过服务调用来操作实体。消费者必须生成一个 CreateUserBindingModel 并将其发送到 User/Create 服务,然后让服务生成实体,而不是创建一个 User 实体,通过 Put 请求将其发送到 User 服务。更改地址是通过 ChangeAddress(ChangeAddressBindingModel 模型) 方法完成的,而不仅仅是更新整个对象。查询更有针对性,而且很少返回整个域对象。

当我们不再提供 CRUD 操作时,继续使用 OData 作为我们 Web API 的基础是一个坏主意吗?是否有另一种方法可以像使用 OData 一样公开我们服务的详细信息?我知道 WCF 服务提供了类似的功能,但我的印象是它比 OData 更依赖于 CRUD。

Dan*_*iel 4

OData是一个面向数据的API规范,它是反DDD的。虽然它可以满足您实现 REST API 的所有要求,但它最适合数据处理 API。我想您已经知道使用 OData 感觉就像通过 HTTP 操作数据库一样。如果您使用 DDD,您应该完全忘记 OData。