繁体   English   中英

GET,POST,PUT哪个应用于将json对象接收到我的rest api并作为响应发送json对象?

[英]GET,POST,PUT Which should be used for receiving a json object to my rest api and send a json object in response?

我正在使用MVC编写我的第一个Web API。

我知道,通常执行POST和PUT来定义用于在API后面插入或更新数据库的HTTP方法。 但是我要做的就是从调用方接收一个JSON对象,进行一些处理,然后返回另一个JSON对象作为响应。 不涉及数据库。

我已经在API控制器方法中同时使用POST和GET进行了测试,它们都可以正常工作,但实际上我应该使用哪种http方法以获得最佳实践?

例如

public IHttpActionResult Get(ApiEquipment equipment)
{
    // Convert equipment to a compatible buffer
    return Ok(new ConvertToBuffer(equipment));
}

GET对于不需要向服务器传递许多参数的SAFE(*)操作很有用-所有参数都必须在URL中,因为GET操作不会在HTTP正文中传递数据。

POST对于UNSAFE(*)操作或需要将大量数据传递到服务器的操作很有用,因为可以在HTTP正文中传递数据。

使用GET进行参数较少的简单查询和计算。 对于大型有效负载或更改服务器状态的操作(例如,更新某些内容或执行复杂的业务操作),请使用POST。

有关更多详细信息,请参阅RFC 7231中HTTP方法定义

(*)SAFE操作是不会更改(可见)服务器状态的操作。 UNSAFE操作确实会更改(可见)服务器状态。

GET

似乎您只想从原始数据(调用方的请求)中以有意义的表示形式(处理后响应)检索数据。 没有修改/插入数据,因此应该使用GET

POST动词似乎就是您想要的。

如果我理解正确,则希望将JSON从客户端发送到服务器。 然后,服务器将修改JSON并将其返回给客户端。

在REST API中, POST通常用于创建新资源 但这也是不应该使用其他方法执行的操作的笼统动词

有关使用POST调用任意处理的更多详细信息,请查看此答案

如果需要处理JSON对象,我建议您使用“ HTTPPOST”,否则请使用GET方法。

考虑一下使用HttpPost方法的示例,因为我处理了JSON对象以从数据库中获取一些信息。

    [HttpPost]
    public IHttpActionResult Masters([FromBody]Download_Config_UserInfo Info)
    {
        List<TestMaster> testMaster = null;
        ResponseValidation objValidation = new ResponseValidation();
        try
        {
            #region Validation
            objValidation = base.ValidateRequest(Info);
            if (!objValidation.isValid)
                return base.JsonErrorResult(this.MasterName, objValidation.ErrorCode, objValidation.ErrorDesc);
            #endregion

            #region Initialization
            this.Initialization();
            #endregion

            #region Functionality

            //testMaster = this.GetTestMaster();
            testMaster = this.GetTestDateMaster();                
            if (testMaster == null)
                return base.JsonErrorResult(this.MasterName, "E19", "Data Not Available");

            var result = (from a in testMaster
                          select new object[]
                          {
                              a.TestId,
                              a.TestName
                          });
            #endregion

            return base.JsonResult(this.MasterName, this.Fields, result);

        }
        catch (Exception ex)
        {
            loggerService.Error(Info.ToJSON(), this.MasterName, ex);
            return base.JsonErrorResult(this.MasterName, "E20", "Internal Server Error", ex.Message + "_" + ex.StackTrace);
        }
        finally
        {
            testMaster = null; objValidation = null; base.UserMaster = null; base.UserPositionMapping = null;
        }
    }

    #endregion

    #region Functionality

    [NonAction]
    public List<TestMaster> GetTestMaster()
    {
        List<ADM_Retailer> testMaster = null;
        try
        {
            testMaster = this.GetTest();
            if (testMaster == null || (testMaster.Count == 0)) { return null; }

            string weekNo = base.GetWeekNumber();

            return (from a in testMaster
                    select new TestMaster
                    {
                        TestId = a.ARTR_Id,
                        TestName = a.ARTR_Name,
                    }).ToList();
        }
        finally { }
    }

暂无
暂无

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

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