[英]Web Api Response Standards
从RESTful架构的角度来看,关于返回值应该是什么,我有两条发展路径。 以下每种方法的优缺点是什么?
第一种方法。
客户端将提交一份post
项目的Hologram
。 这是方法一中的模型。
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();
}
}
这个想法是,该方法将能够为客户端提供更快的响应,因为我将立即返回与此Hologram
关联的guid
。 这是方法一的存储库,我还没有建立数据库连接,但是_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;
}
第二种方法。
客户也将提交商品Hologram
的post
,但是模型有所不同。
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)。 一旦发生这种情况, Hologram
的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;
}
第二种方法的优缺点基本上与上述方法相反:)总之,鉴于您提供的信息,我最好使用第二种方法,因为它更可靠且更容易正确实现 。
我建议您继续使用第二种方法。 在请求DTO上具有应该在响应DTO中生成并返回的属性,这似乎是一种反模式。
您的第一种方法还介绍了与客户期望的相比,可能会保留错误的GUID。 例如,客户端应用程序可能会在将POST请求提交到您的API之前记下public GUID属性。 当服务器收到请求时,它将构造一个新的Hologram
对象,从而生成一个新的 GUID,该GUID与在调用应用程序中生成的GUID不同。
至少使用第二种方法,唯一标识符仅生成一次,并且只有在整个请求成功后,客户端才会期望返回唯一标识符。 如果出现暂时性错误,则客户端将没有ID,因为它从未成功保存到数据库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.