将RESTful API端点概念化为MVC设计模式中的视图

时间:2011-05-18 13:48:15

标签: model-view-controller api design-patterns rest

当我试图描述我在研究论文中构建的系统时,在试图表示我创建的系统的复杂性时,我遇到了以下符号问题:

  • 假设我设计服务A ,仅通过其RESTful端点与世界进行通信。然后,我设计服务B ,它使用服务A 作为其主干,并将其数据表示给外部世界。
  • 假设服务A 有自己的模型和数据控制器。那么RESTful端点应该被概念化为MVC模式中的视图吗?
  • 假设服务B 有自己的一组代理模型,它们或多或少直接映射服务A 的模型。它为用户提供了一组GUI视图,具有完全独立的控制器集。服务A在MVC中的位置在哪里?它应该表示为封装模型吗?

真实世界的例子(与我正在处理的问题无关)将是:

  • del.icio.us和pinboard.in提供大致类似的API集,因此可以作为服务客户端的服务A 进行交换(出于问题的目的,假设它们都是基于MVC模式,但可能有完全不同的模型和控制器集)
  • Delibar是一个iOS应用程序,因此遵循MVC架构并匹配服务B 的要求;假设Delibar在API端点中表示的 service A 的数据模型之后对其数据进行建模。

因此pinboard.in和del.icio.us是Delibar的模型吗? RESTful端点是否为视图?因此pinboard.in和del.icio.us的视图集是一样的吗?

1 个答案:

答案 0 :(得分:1)

端点是Controller上的操作/操作。视图是控制器响应HTTP GET请求而返回的数据(HTML,XML,JSON或其他)。

服务A未表示为服务B的MVC三元组的一部分,因为MVC处理模型的交互和控制器对视图的选择。通过服务B的数据访问层访问服务A.如果使用“活动记录”模式,则服务B中的控制器对模型的查询或更改将由模型本身传递到数据访问层。如果您使用的是域服务/数据映射器/存储库模式,控制器将调用此层封装数据访问。