繁体   English   中英

Web Api响应标准

[英]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;
        }

第二种方法。

客户也将提交商品Hologrampost ,但是模型有所不同。

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;
        }

第一种方法的优缺点

优点

  • 客户端可以更快地接收ID,而无需等待数据库操作完成。

缺点:

  • 他收到的更快,但是他将如何处理呢? 如果他想立即通过该ID查询全息图,如果尚未插入该全息图怎么办? 如果插入失败怎么办,客户将如何得知呢?
  • 当您在服务器上而不是数据库中生成向导时,它们通常不是顺序的。 在数据库中,您可以将生成的guid配置为顺序的,如果在guid列上具有索引(并且通常具有这种索引,因为您通常希望按guid查询),这将有助于插入性能。

第二种方法的优缺点

第二种方法的优缺点基本上与上述方法相反:)总之,鉴于您提供的信息,我最好使用第二种方法,因为它更可靠且更容易正确实现

我建议您继续使用第二种方法。 在请求DTO上具有应该在响应DTO中生成并返回的属性,这似乎是一种反模式。

您的第一种方法还介绍了与客户期望的相比,可能会保留错误的GUID。 例如,客户端应用程序可能会在将POST请求提交到您的API之前记下public GUID属性。 当服务器收到请求时,它将构造一个新的Hologram对象,从而生成一个新的 GUID,该GUID与在调用应用程序中生成的GUID不同。

至少使用第二种方法,唯一标识符仅生成一次,并且只有在整个请求成功后,客户端才会期望返回唯一标识符。 如果出现暂时性错误,则客户端将没有ID,因为它从未成功保存到数据库中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM