Rest 需要在web api资源上使用不同的DTO

Rest 需要在web api资源上使用不同的DTO,rest,asp.net-web-api,Rest,Asp.net Web Api,我在WebAPI中使用了两个DTO,我注意到我一次又一次地重用相同的属性 比如说 public class Response { public int Id {get;set;} public DateTime CreatedOn {get;set;} public string Name {get;set;} public string Code {get;set;} } public class InsertRequest { public string Name {get;set;}

我在WebAPI中使用了两个DTO,我注意到我一次又一次地重用相同的属性

比如说

public class Response
{
public int Id {get;set;}
public DateTime CreatedOn {get;set;}
public string Name  {get;set;}
public string Code {get;set;}
}
public class InsertRequest
{
public string Name  {get;set;}
public string Code {get;set;}
}
由于DTO是在代码中稍后处理的,因此是否真的需要为资源指定InsertRequest?即使不插入Id,在代码中提供属性Id也可能会产生误导


另一方面,如果Id被声明为可为null,则可能会产生误导,因为响应中的Id不应为null,因此我怀疑这两个请求是否应该被拆分,或者它们是否都在一个代表资源的请求中?

您描述的情况对于必须创建/更新实体的情况非常常见

我建议你保持现状。当您想要更新和标识时,CreatedOn没有任何意义,好吧,它在创建之后永远不会更改,所以再次强调,将它放在更改实体中是没有意义的。此外,您可能会在路线中提供您的Id,以便实际实体无论如何都不需要它:

反对:

www.somedomain.com/entity/id
实体不需要id字段,因为它来自URI

是的,你可以争辩说,你最终会得到具有重复字段的实体,但同时你会有一个干净的API,这是有意义的,这是更重要的,因为这是客户端将看到和使用的

还有一件事,我赞成保持一个清晰的命名约定,这样如果一个实体是InsertRequest,那么另一个实体将是UpdateRequest