AngularJS和Web服务交互最佳实践

WeS*_*eSt 5 c# web-services angularjs

我有一个我用AngularJS,C#和Entity Framework实现的小网站.整个网站是单页应用程序,从一个单一的C#Web服务获取所有数据.

在此输入图像描述

我的问题涉及C#Web服务应该公开的接口.这一次,服务可以以RESTful方式提供实体,直接提供或作为DTO提供.另一种方法是Web服务仅为一个用例返回一个对象,以便AngularJS Controller只需要调用一次Web服务,并且可以直接使用响应的模型.

为了澄清,请考虑以下两个片段:

  // The service returns DTOs, but has to be invoked multiple 
  // times from the AngularJS controller
  public Order GetOrder(int orderId);
  public List<Ticket> GetTickets(int orderId);
Run Code Online (Sandbox Code Playgroud)

  // The service returns the model directly
  public OrderOverview GetOrderAndTickets(int orderId);
Run Code Online (Sandbox Code Playgroud)

虽然第一个示例公开RESTful接口并使用资源隐喻,但它具有仅返回部分数据的巨大缺点.第二个示例返回根据MVC控制器的需求定制的对象,但很可能只在一个MVC控制器中使用.此外,在第二种情况下,需要对公共字段进行大量映射.

我发现我在我的网络服务中不时做这两件事,并想得到一些反馈.我并不太关心性能,尽管多个请求当然有问题,一旦它们使应用程序变得太慢,它们就需要重构.设计Web服务接口的最佳方法是什么?

Nat*_*lus 1

我建议采用 REST 方法、通用 API 设计,而不是单一目的远程过程调用 (RPC) 方法。虽然 RPC 在项目开始时会非常快,但端点的数量通常会成为维护代码时的负担。现在,如果您的服务器调用类型少于 20 种,我想说您可以坚持使用这种方法,而不会受到严重影响。但如果您的项目的生命周期超过一年,您最终的终点可能会远远多于 20 个。

使用基于休息的服务,您始终可以添加一个可选参数来描述所述资源包含的子记录,并为特定调用返回它们。