前言
Webapi也是一种服务,是属于服务端的,供客户端调用,类似webservice,但是与mvc请求方式不一样(MVC通过路由 controller/action请求),Webapi通过不同的HTTP请求(get(查询)、put(更新)、post(增加)、delete)来表达不同的动作(CRUD),只关注数据。它非常适合构建移动客户端服务,显示端可以用H5等进行创建。
MVC与Web api的区别与联系
声明:本小结叙述来微软mvp杨旭的草根专栏https://www.cnblogs.com/cgzl/p/11814971.html
MVC(Model-View-Controller)是一种主要用来构建UI的架构模式。对于MVC模式其实有很多种解释存在,但是无论那种解释,它们都会强调松耦合和关注点分离(separation of concerns)。
也是由于这两点的存在,程序的可测试性会大大提高,程序各部分的可复用性也很高。
更多关于MVC的介绍,可以看一下微软的官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-3.0
注意:MVC不是一个完整的应用程序架构,我认为它主要是用在展示层。所以实现UI就是MVC的一部分工作。
我认为API同样可以看作是UI,它就是为API消费者所提供的UI。
让我们把MVC的三部分分别对应到API:
-
Model,它负责处理程序数据的逻辑。这里的Model可以包含在当前级别获取从存储获取数据的逻辑。但是有一些Model不包含任何逻辑,例如API所使用的DTO(Data transfer objects),这类的Model会被串行化到响应的body里面。
-
View,它是程序里负责展示数据的那部分。在构建API的时候,View就是数据或资源的展示。现在通常使用JSON格式。
-
Controller,它负责View和Model之间的交互。包括处理用户输入,用API的术语来讲,和API交互的“用户”就是指API的消费者,这类用户通常是另一个程序,例如Angular的SPA程序。
Controller和View依赖于Model,Controller依赖于View,这也是分离的一个好处。
换句话说,Controller会选取适当的View来展现给用户,并一同把用户请求的Model数据带回去。
当API消费者发出请求的时候,在Controller上面的Action将会被触发,Controller会把接收到的输入数据发送给负责业务处理逻辑或数据访问逻辑的那部分程序。然后Controller会把Model返回给View,这里的View就是资源的展示(通常是JSON格式)
初认识.net core web api
创建ASP.NET CORE webapi默认项目:WebAPIDemo.
Controllers文件夹下有一个ValuesController.cs,默认代码如下:
namespace WebAPIDemo.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
//.Net Core2.0(VS2017)下默认继承自Controller,且上面没有打[ApiController]特性
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
[HttpDelete("{i