Web API 学习 Day 1
理解WebAPI
什么是API?
中文翻译是应用程序接口,既然是接口那就抽象了复杂的代码,提供了一些简单的规则直接使用。相当于在室内用电只需要把插头插进插座。通常是开发人员在其应用中可用于与用户 Web 浏览器组件或用户计算机上的其他软件/硬件或第三方网站和服务进行交互的一组代码功能(例如方法、属性、事件和网址)。
API 的用户是开发软件的工程师,比如一个软件服务可能会在多种设备上被人使用,例如手机、浏览器、可穿戴设备等,这些设备必须要和同一个后端数据库互动,才可能呈现出一致的内容。为了实现上述功能,会设计一个 API 接口,让各个设备的开发团队共享同一个接口去使用数据库。
什么是Web API?
关键点——可以对接各种客户端(浏览器、移动设备),构建http服务的框架(待学习)。在ASP.NET框架地位如图:
Web API负责构建http常规服务,而SingalR主要负责的是构建实时服务,例如股票,聊天室,在线游戏等实时性要求比较高的服务。
为什么要用Web API?
最重要的是可以构建面向各种客户端的服务。示意图如下:
Web API项目的创建
模板创建
选择“ASP.NET Core Web 应用程序”模板,项目名为TodoAPI,这事自动创建了一个天气预报的API,运行网页中会出现一系列的天气信息。我们目标要建立一个待办事项的API。
添加模型类
Models是一组表示应用管理数据的类,所以在文件夹里添加一个TodoItem类,里面包含了要管理的字段:Id、Name、IsComplete
public class TodoItem
{
//添加字段的属性,属性用作关系数据库中唯一的键
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
//是否完成
}
添加Database Context(未理解)
这是协调数据实体框架功能(Entity Framework functionality)的主要类,这个类是派生Microsoft.EntityFrameworkCore.DbContext,在TodoContext类中添加如下代码:
//添加TodoContext数据库上下文
public class TodoContext:DbContext
{
public TodoContext(DbContextOptions<TodoContext> options):base(options)
{
}
public DbSet<TodoItem> TodoItems { get; set; }
构建Controllers
在已有的Controller文件夹中建一个新的API控制器,modules和context选择对应的TodoItem和TodoContext。
相关疑惑点
在Web API项目的构建中发现有Modole和Controller,这和MVC框架类似,所以有了Web API和MVC有什么区别和联系的疑惑。
MVC VS Web API
MVC主要是用来建站,Web API主要是用来构建 http 数据服务。
- 技术实现层面:Web API被砍去了 view 层 ,整体轻快
- Web API 有自己独特的消息处理管道
- Web API 有自己独特的路由系统
- Web API的托管层也不一样,不单只web托管(例如: IIS) , 还能自托管 (寄宿在windows 进程),还能托管在 OWIN的实现着(例如: katana);MVC 只能托管在 IIS 上
HTTP数据服务
HTTP协议定义了什么?
-
定义了浏览器怎样向万维网服务器请求万维网文档
-
定义了服务器怎样把文档传送给浏览器
大致工作流程:
HTTP请求方法
- Get:获取查询资源,对应DB中的Select操作,其只查询而不修改数据,参数在URL中传递,而非Rquest-Body中传递,不安全
- Set:向系统中更新数据,对应DB中的Update操作,参数在Requet-Body中传递
- Put:向系统中插入数据,对应DB中的Insert操作,不带验证机制,不安全
- Delete:向系统中删除数据,对应DB中的Delete操作
- Head:返回Http-Responce头部信息
- Options:一般用来询问URI支持的方法,查询服务器的性能
Db Context
Db Context 实例表示与数据库的会话,可用于查询和保存实体实例, 是工作单元和存储库模式的组合。
初始化Db Context类的新实例,可以利用方法Database()提供上下文的数据库相关信息和操作的访问,利用方法Model()获取有关实体、实体之间的关系以及他们如何映射到数据库的元数据。