Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。
词组的翻译:"表现层状态转化"。
如果一个架构符合REST原则,就称它为RESTful架构。
REST规范定义了资源的通用访问格式,它不是一个强制要求,遵守该规范可以让人易于理解接口的能力。
REST规范定义
资源的访问(API接口)划分到多个部分组合表述
- URL 描述资源的位置以及层级结构(请勿使用动词如:GetProjects)
- METHOD 资源的访问方法(动作)
- Body or Params 访问资源的条件或数据
- Headers 其他说明或条件(如:版本号、权限、其他常量)
Asp.Net Core 中实现
- 例如,商品Product就是一种资源。获取所有Product的URL
GET /api/products
如下:
// GET /api/products?kw=&skip=0&take=15
[HttpGet]
public IActionResult Get(string kw,int skip,int take)
{
return Ok();
}
- 而获取某个指定的Product,例如,id为123的Product,其URL
GET /api/products/123
如下:
// GET /api/products/123
// 注意参数{id}必须与方法参数名称完全相同(区分大小写)
[HttpGet("{id}")]
public IActionResult Get(int id)
{
return Ok();
}
- 新建一个Product使用POST请求,JSON数据包含在body中,URL
POST /api/products
如下:
// POST /api/products
[HttpPost]
public IActionResult Post(string product)
{
return Ok();
}
- 更新一个Product使用PUT请求,例如,更新id为123的Product,其URL
PUT /api/products/123
如下:
// PUT /api/products/123
// 注意参数{id}必须与方法参数名称完全相同(区分大小写)
[HttpPut("{id}")]
public IActionResult Put(int id,string product)
{
return Ok();
}
- 删除一个Product使用DELETE请求,例如,删除id为123的Product,其URL
DELETE /api/products/123
如下:
// DELETE /api/products/123
// 注意参数{id}必须与方法参数名称完全相同(区分大小写)
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
return Ok();
}
- 资源还可以按层次组织。例如,获取某个Product的所有评论,其URL
GET /api/products/123/reviews
使用:
// GET /api/products/123/reviews?kw=&skip=0&take=15
// 注意参数{id}必须与方法参数名称完全相同(区分大小写)
[HttpGet("{id}/reviews")]
public IActionResult reviews(int id, string kw, int skip, int take)
{
return Ok();
}
其他
Reset规范中 PUT、DELETE、OPTION等请求方法都由GET、POST派生而来,所有方法特性都遵循GET、POST。
- 由GET派生的有:OPTION、DELETE
- 有POST派生的有:PUT
GET与POST区别
- POST能提交更多的数据,因此对于需要大量数据提交时必须使用POST
- GET相对与POST更快(其实可用忽略的)因此我们在获取数据时尽量使用GET。
网友评论