REST Web服务 - 获取和创建的不同类型

时间:2013-11-18 20:05:53

标签: c# web-services rest asp.net-web-api

使用ASP.Net Web Api,您的GET端点返回与POST端点接受的不同类型是否正常/良好做法?

在许多情况下,我们想要在GET中返回的字段不能在POST中设置,例如“LastUpdated”,“Total”等,需要不同的类型?

示例,GET返回ReservationForGetModel,而POST接受ReservationForCreateModel:

public class ReservationController : ApiController {
...

  public HttpResponseMessage Get(int id) {
    Reservation reservation = _reservationService.Get(id);
    //map Reservation to ReservationForGetModel
    //return ReservationForGetModel
  }

  public HttpResponseMessage Post(ReservationForCreateModel reservation) {
    //create reservation using ReservationForCreateModel here
    //return 201 with location header set
  }

}

2 个答案:

答案 0 :(得分:5)

GET和POST可以使用完全不同的媒体类型。考虑HTML表单:使用application/x-www-urlencoded-form进行POST,GET返回text/html

使用GET和PUT,媒体类型更可能是对称的,但这并不是一个严格的规则。

答案 1 :(得分:1)

你可以,但可能不应该。 Web API被设计为RESTful API的平台,包括

Manipulation of resources through these representations

假设我有一个使用您的网络服务的移动应用程序。要创建实体,我首先创建一个ReservationForCreateModel,并将其POST。现在我想更新它。我必须有客户端代码,可以将ReservationForCreateModel转换为ReservationModel,这将是服务器上相同代码的重复。

使用DTO模式,并发送回您所接受的相同类型的对象。也许在服务器内部它们将被拆分,但对于外部世界,应该有一个共同的语言。

听起来你真正的问题是这个

在许多情况下,我们想要在GET中返回的字段不能在POST中设置,例如“LastUpdated”,“Total”等,需要不同的类型?

为什么不能设置这些值?