Web Api响应标准

本文关键字:标准 响应 Api Web | 更新日期: 2023-09-27 18:16:23

从RESTful架构的角度来看,关于返回值应该是什么,我有两条开发路径。下面每种方法的优缺点是什么?

的第一个方法。

客户将提交Hologram项的post。这是方法一中的模型。

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()
        {
        }
    }

这个方法的想法是在某种程度上存储过程或实体框架插入一个新记录到数据库将返回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;
        }

Web Api响应标准

第一种方法的优缺点

优点

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

缺点:

    他收到的更快了,但是他会怎么做呢?如果他想通过这个id立即查询全息图,如果它还没有被插入呢?如果插入失败,客户端如何知道?
  • 当您在服务器而不是数据库中生成指南时,它们通常不是顺序的。在数据库中,如果您在guid列上有索引(并且您通常有这样的索引,因为您通常希望按guid进行查询),您可以将生成的guid配置为顺序的,这将有助于插入性能。

第二种方法的优缺点

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

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

您的第一个方法还引入了与客户端期望相比持久化不正确guid的可能性。例如,客户机应用程序在向API提交POST请求之前可能会注意到公共GUID属性。当服务器接收到请求时,它将构造一个新的Hologram对象,从而生成一个新的 GUID,该GUID与调用应用程序中生成的GUID不同。

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