ASP.NET Core RESTful學習理解

2023-01-31 06:02:57

一、瞭解什麼是REST

  1. REST是「REpresentational State Transfer」的縮寫 ,表述性狀態傳遞;
  2. REST是一種軟體架構風格,用於構造簡單、可靠、高效能的WEB應用程式;
  3. REST中,資源(Resource)是最基本的概念,任何能夠命名的物件都是一個資源,每個資源都有一個統一的資源識別符號URI(Uniform Resource Identifier),通過URI能夠標識且存取該資源。因此,REST是一種基於資源的架構風格;
  4. REST中,對資源的操作通過HTTP方法來完成,如:GET、POST、PUT、DELETE、PATCH等;
  5. REST提出了一系列約束,遵循這些約束的應用程式稱為RESTful API應用

二、什麼是Restful

Restful是符合rest架構風格的網路API介面,完全承認Http是用於標識資源。Restful URL是面向資源的,可以唯一標識和定位資源。 對於該URL標識的資源做何種操作是由Http方法決定的。

三、使用Restful特點有哪些

  1. 所有的資源都儘量通過URL來表示,避免通過QueryString、報文體來對資源進行定位,這樣URL的語意性更清晰。
  2. 對所有型別資源的新增、刪除、修改、查詢操作都統一為向資源傳送POST、DELETE、PUT、GET請求,介面統一且具有自描述性,減少了開發人員對介面檔案的依賴性。
  3. 對於GET、PUT、DELETE 等冪等的操作,閘道器、網路請求元件等可以對失敗的請求自動重試。
  4. 閘道器等可以對GET請求進行快取,能夠提升系統的存取速度,而且降低伺服器的壓力。
  5. 通過HTTP狀態碼反映伺服器端的處理結果,能夠統一錯誤碼,避免自定義錯誤碼帶來的不統一的問題。使用者端也可以根據錯誤碼進行統一處理,比如對於403狀態碼,使用者端統一提示使用者去登入。
  6. 閘道器等系統可以根據狀態碼來分析系統的存取資料,比如可以根據HTTP狀態碼分析有多少成功的請求,有多少失敗的請求。

四、Restful引數如何傳遞

使用者端在給伺服器端傳遞引數的時候,有URL、QueryString、請求報文體3種主要方式。

  1. 通過URL傳遞更符合 Restful規範,如果要傳遞的引數太多或者內容太長的話,通過URL傳遞的方式就不太適合。
  2. 通過QueryString傳遞比較靈活,但是同樣不適合傳遞太長的內容。
  3. 通過請求報文體傳遞引數不限制內容的長度,而且通過JSON 可以傳遞複雜的格式。

溫馨建議

  1. 對於儲存、更新類的請求一般都是使用POST、PUT請求,把全部引數都放到請求報文體中。
  2. 對於GET請求,一般引數的內容都不會太長,因此統一通過QueryString傳遞引數就可以。
  3. 對於極少數引數內容超過URL限制的請求,由於GET、PUT請求都是冪等的,因此把請求改成通過PUT請求,然後通過報文體來傳遞引數。

五、程式碼演示

微軟為Web API提供的模板程式碼大部分都嚴格遵守Restful風格的,如下

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]//Restful 風格
    //[Route("api/[controller]/[action]")] //RPC風格
    [ApiController]
    public class RestfulApiController : ControllerBase
    {
        // GET: api/<RestfulApiController>
        [HttpGet]
        public IEnumerable<stringGet()
        {
            return new string[] { "value1""value2" };
        }

        // GET api/<RestfulApiController>/5 根據id獲取
        [HttpGet("{id}")]
        public string Get(int id)
        {
            return "value";
        }

        // POST api/<RestfulApiController>
        [HttpPost]
        public void Post([FromBody] string value)
        {
            //code
        }

        // PUT api/<RestfulApiController>/5
        [HttpPut("{id}")]
        public void Put(int id, [FromBody] string value)
        {
            //code
        }

        // DELETE api/<RestfulApiController>/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
            //code
        }
    }
}