前言
资源
抽象的说他可以是音频、也可以是视频,更可以是订单。更俗讲其实就是实体,更接近我们平常说的“类(class)”。另外REST强调资源有唯一的URI。下面有对比
动作
主要动作:
- GET:检索单个资源;
- POST:主要是创建资源,但是GET的参数长度受限,因此也可以用在复杂参数的检索资源场景;
- PUT:更新资源所有属性,也可以称为替换资源;
- PATCH:更新资源部分属性;
- DELETE:删除资源;
表述
对于Request与Response的自描述,而表述方式有多种:XML、JSON等,强调HTTP通信的语义可见性。
对比
RPC
SMSApi.com/api/GetSMS
SMSApi.com/api/CreateSMS
传统的接口设计面向过程的,每个动作有特定的URI。
REST
SMSApi.com/api/SMS GET
SMSApi.com/api/SMS POST
REST API每个资源只有唯一的URI,而资源可以有不同的动作执行相应的接口
RPC的更加倾向于面向过程,而RESTful则以面向对象的思想进行设计。
接口定义
回到我们的短信服务,以上面的三特点进行出发,SMS不需要由外部服务进行删除、修改资源因此:
资源:SMS
动作:GET、POST
表述方式:我们约定Request、Response为JSON格式
/// <summary> /// 短信接口 /// </summary> [Route("api/[controller]")] [ApiController] public class SmsController : ControllerBase { private readonly SmsService _smsService; private readonly IBus _bus; public SmsController(SmsService smsService, IBus bus) { _smsService = smsService; _bus = bus; } /// <summary> /// 获取一条短信记录 /// </summary> /// <param name="id">主键</param> /// <returns></returns> [HttpGet("{id}")] public ActionResult<SmsModel> Get(string id) { if (string.IsNullOrEmpty(id)) return NotFound(); var smsService = _smsService.Get(id); return smsService.Sms; } /// <summary> /// 发送短信 /// </summary> /// <param name="model"></param> /// <returns></returns> [HttpPost] public ActionResult Post([FromBody] List<PostModel> model) { _smsService.Add(model.MapTo<List<PostModel>, List<AddSmsModel>>()); _smsService.SmsList.Where(a => a.TimeSendDateTime ==

