一、了解什么是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
}
}
}
坚持在dotNet道路不断探索的程序员