2016-05-12 72 views
0

我正在使用MVC编写我的第一个Web API。GET,POST,PUT哪一个应该用于接收一个JSON对象到我的休息API并发送一个JSON对象作为响应?

我知道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)); 
} 
+0

'POST'是*捕获所有的*动词。 –

+0

你是什么意思? – Borjante

+0

@Czeshirecat只是澄清:你是否从客户端发送JSON到服务器。然后服务器将修改JSON并将其返回给客户端。你是这个意思吗? –

回答

2

GET是有用的。

POST是不安全的(*),你需要大量的数据传递给服务器的数据可以在HTTP主体传递操作或操作有用。

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

查看HTTP method definitions in RFC 7231了解更多详细信息。 (*)安全操作是不会更改(可见)服务器状态的操作。不安全操作确实会改变(可见的)服务器状态。

1

GET

看来,你只是想检索有意义表示从原始数据(从主叫请求)数据(处理后响应)。 没有修改/插入数据,所以应该使用GET。所有的参数必须在URL作为GET操作不会在HTTP正文中传递数据 - 用于安全(*)操作,你不需要很多的参数传递给服务器

1

POST动词似乎是你想要的。

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

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

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

1

我会建议你使用“HTTPPOST”如果你需要处理你的JSON对象使用别的方法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 { } 
    } 
相关问题