一、瞭解什麼是REST
REST是“REpresentational State Transfer”的縮寫 ,表述性狀態傳遞; REST是一種軟體架構風格,用於構造簡單、可靠、高效能的WEB應用程式; REST中,資源(Resource)是最基本的概念,任何能夠命名的物件都是一個資源,每個資源都有一個統一的資源識別符號URI(Uniform Resource Identifier),透過URI能夠標識且訪問該資源。因此,REST是一種基於資源的架構風格; REST中,對資源的操作透過HTTP方法來完成,如:GET、POST、PUT、DELETE、PATCH等; REST提出了一系列約束,遵循這些約束的應用程式稱為RESTful API應用
二、什麼是Restful
Restful是符合rest架構風格的網路API介面,完全承認Http是用於標識資源。Restful URL是面向資源的,可以唯一標識和定位資源。 對於該URL標識的資源做何種操作是由Http方法決定的。
三、使用Restful特點有哪些
所有的資源都儘量透過URL來表示,避免透過QueryString、報文體來對資源進行定位,這樣URL的語義性更清晰。 對所有型別資源的新增、刪除、修改、查詢操作都統一為向資源傳送POST、DELETE、PUT、GET請求,介面統一且具有自描述性,減少了開發人員對介面文件的依賴性。 對於GET、PUT、DELETE 等冪等的操作,閘道器、網路請求元件等可以對失敗的請求自動重試。 閘道器等可以對GET請求進行快取,能夠提升系統的訪問速度,而且降低伺服器的壓力。 透過HTTP狀態碼反映伺服器端的處理結果,能夠統一錯誤碼,避免自定義錯誤碼帶來的不統一的問題。客戶端也可以根據錯誤碼進行統一處理,比如對於403狀態碼,客戶端統一提示使用者去登入。 閘道器等系統可以根據狀態碼來分析系統的訪問資料,比如可以根據HTTP狀態碼分析有多少成功的請求,有多少失敗的請求。
四、Restful引數如何傳遞
客戶端在給伺服器端傳遞引數的時候,有URL、QueryString、請求報文體3種主要方式。
透過URL傳遞更符合 Restful規範,如果要傳遞的引數太多或者內容太長的話,透過URL傳遞的方式就不太適合。 透過QueryString傳遞比較靈活,但是同樣不適合傳遞太長的內容。 透過請求報文體傳遞引數不限制內容的長度,而且透過JSON 可以傳遞複雜的格式。
溫馨建議
對於儲存、更新類的請求一般都是使用POST、PUT請求,把全部引數都放到請求報文體中。 對於GET請求,一般引數的內容都不會太長,因此統一透過QueryString傳遞引數就可以。 對於極少數引數內容超過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<string> Get()
{
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
}
}
}