Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web Api响应标准_C#_Asp.net Web Api - Fatal编程技术网

C# Web Api响应标准

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

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

第一种方法

客户将提交项目的
全息图
贴子
。这是方法一中的模型

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