使用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
}
}
答案 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”等,需要不同的类型?
为什么不能设置这些值?