-
Web API的方便之处
返回类型如果未对象,会自动返回json格式,节省流量,更简洁 -
Web API和MVC的区别
Web API 无界面,用户不会直接接触WebAPI -
什么是RestFul?
1)首先得说一下MVC接口设计:
提供一个HTTP接口,例如删除id=3的用户,接口:https://localhost:44352/Person/Delete/3
基本格式是controller/action/id
服务器返回一个json对象,成功:{status="ok",data:{"id":3}},失败:{status="idnotfound",msg="id没找到"}
这些返回结果都是前后端约定好的,前端做特定解析
于是,有些老学究就说了:这不符合“HTTP谓词语义”
2)那么什么是“HTTP谓词语义”?
web时代使得MVC模式得以推广,而接口时代“HTTP谓词语义”又被重用
“HTTP谓词语义”认为所有操作都可以转化为增删改查,优势:
(1)不需要解析返回值,无需约定返回报文格式,直接通过HTTP状态码来判断
(2)不需要Action的名字,只看请求类型就可以判断要做什么样的操作(post、get、delete等)
(3)对于不同类型的请求可以做不同的权限控制
(4)有利于系统优化,浏览器可以自动缓存GET请求
(5)Get没有副作用,是幂等的,可以重试
3)restful究竟是啥?
如果接口按照“HTTP谓词语义”设计,那么这个接口就是“restful风格”,遵循Rest标准
然鹅:纯“restful风格”太难搞,大部分公司都无法严格遵守,因此尽可能遵守,不要求极致
- WebAPI 分析:
- WebAPI的Controller从APIController继承
- WebAPI的Action返回值一般不写ActionResult,而是直接给出返回类型
- WebAPI路径不是/controller/Action的形式
- Action中如果有调用异步方法,那么是要吧action生命诚async、返回值搞成Task<>就好了
-
为啥action名字不起作用?
因为WebAPI的默认路由是“api/{controller}/{id}”,此时服务器只根据请求的类型来找到对应方法,如post、get、delete等,根据请求参数去定位 -
那如何让action有用啊?不想完全遵守“restful风格”
把路径改为“api/{controller}/{action}/{id}”,就可以通过路径访问具体action了
这时候就和MVC基本相同:
1)Action方法不能重载,除非通过[HTTPPOST][HTTPGET]来标注
2)尽量不要使用以上两种方法以外的标注
3)强制要求方法都标注[HTTPPOST][HTTPGET]
网友评论