簡體   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