C# Web Api响应标准
从RESTful架构的角度来看,关于返回值应该是什么,我有两种开发路径。下面每种方法的优缺点是什么 第一种方法 客户将提交项目的C# Web Api响应标准,c#,asp.net-web-api,C#,Asp.net Web Api,从RESTful架构的角度来看,关于返回值应该是什么,我有两种开发路径。下面每种方法的优缺点是什么 第一种方法 客户将提交项目的全息图贴子。这是方法一中的模型 public class Hologram { public double HoloWidth { get; set; } public double HoloHeight { get; set; } public double HoloDepth { get; set; }
全息图贴子。这是方法一中的模型
public class Hologram
{
public double HoloWidth { get; set; }
public double HoloHeight { get; set; }
public double HoloDepth { get; set; }
public string HoloGuid { get; private set; }
public Hologram()
{
this.HoloGuid = new Guid().ToString();
}
}
其想法是,此方法将能够向客户端提供更快的响应,因为我将返回与此全息图直接关联的guid
。
这里是方法一的存储库,我还没有建立数据库连接,但是\u holos
将是数据库
public string Add(Hologram hg)
{
Hologram hig = new Hologram();
hig = hg;
AsyncCode(_holos.Values.Add(hig)); /// this adds to the database via injection, running asynchronously.
return hig.HoloGuid;
}
第二种方法
public int Add(Hologram hg)
{
_holos.Values.Add(hg); ///adds to database via injection
///hg will have the ID from the database at this point... somehow.
return hg.ID;
}
客户还将提交一份项目全息图的帖子
,但模型有点不同
public class Hologram
{
public double HoloWidth { get; set; }
public double HoloHeight { get; set; }
public double HoloDepth { get; set; }
public string HoloId { get; set; }
public Hologram()
{
}
}
这种方法的想法是,在数据库中插入新记录的存储过程或EntityFramework将返回id(我还不知道如何获取id)。一旦发生这种情况,全息图的ID可以返回到App服务器,然后提供返回ID。这里是第二种方法的存储库
public int Add(Hologram hg)
{
_holos.Values.Add(hg); ///adds to database via injection
///hg will have the ID from the database at this point... somehow.
return hg.ID;
}
第一种方法的利弊
赞成的意见
- 客户端可以更快地接收id,而无需等待数据库操作完成
欺骗:
- 他收到的更快,但他会怎么处理呢?如果他想通过这个id立即查询全息图,如果它还没有插入呢?如果insert失败了,客户怎么知道呢
- 当您在服务器上而不是在数据库中生成GUI时,它们通常是不连续的。在数据库中,您可以将生成的guid配置为连续的,如果guid列上有索引,这将有助于提高插入性能(通常有这样的索引,因为您通常希望按guid进行查询)
第二种方法的利弊
第二种方法的利弊基本上与上述相反:)
总之,如果您只提供了信息,我最好使用第二种方法,因为它更可靠,更易于正确实施第一种方法的利弊
赞成的意见
- 客户端可以更快地接收id,而无需等待数据库操作完成
欺骗:
- 他收到的更快,但他会怎么处理呢?如果他想通过这个id立即查询全息图,如果它还没有插入呢?如果insert失败了,客户怎么知道呢
- 当您在服务器上而不是在数据库中生成GUI时,它们通常是不连续的。在数据库中,您可以将生成的guid配置为连续的,如果guid列上有索引,这将有助于提高插入性能(通常有这样的索引,因为您通常希望按guid进行查询)
第二种方法的利弊
第二种方法的利弊基本上与上述相反:)
总之,考虑到您提供的信息,我最好使用第二种方法,因为它更可靠,更易于正确实施。我建议继续使用第二种方法。在请求DTO上有一个应该在响应DTO中生成和返回的属性,这似乎是一种反模式
您的第一种方法还引入了与客户机期望的情况相比,可能会持久化不正确的guid。例如,客户机应用程序可能会在将POST请求提交到API之前注意公共GUID属性。当服务器收到请求时,它将构造一个新的全息图
对象,从而生成一个与调用应用程序中生成的GUID不同的新的GUID
至少在第二种方法中,唯一标识符只生成一次,并且只有在整个请求成功时,客户端才会期望它返回。如果出现暂时性错误,客户端将没有ID,因为它从未成功保存到数据库。我建议继续使用第二种方法。在请求DTO上有一个应该在响应DTO中生成和返回的属性,这似乎是一种反模式
public string Add(Hologram hg)
{
Hologram hig = new Hologram();
hig = hg;
AsyncCode(_holos.Values.Add(hig)); /// this adds to the database via injection, running asynchronously.
return hig.HoloGuid;
}
您的第一种方法还引入了与客户机期望的情况相比,可能会持久化不正确的guid。例如,客户机应用程序可能会在将POST请求提交到API之前注意公共GUID属性。当服务器收到请求时,它将构造一个新的全息图
对象,从而生成一个与调用应用程序中生成的GUID不同的新的GUID
至少在第二种方法中,唯一标识符只生成一次,并且只有在整个请求成功时,客户端才会期望它返回。如果出现暂时性错误,客户端将不会有ID,因为它从未成功保存到数据库中。我希望它只发生在创建时,但除此之外,yea second方法更好我希望它只发生在创建时,但除此之外,yea second方法更好
public string Add(Hologram hg)
{
Hologram hig = new Hologram();
hig = hg;
AsyncCode(_holos.Values.Add(hig)); /// this adds to the database via injection, running asynchronously.
return hig.HoloGuid;
}