有关项目中接口编写的知识经验总结
有关A04 项目中接口编写的知识经验总结
下面将xxx项目接口编写,主要是AES加解密、脚本检查、脚本上传中遇到的知识点或者经验做出梳理,由于知识点比较碎,所以会加入之前相关的总结,后续也会补充和重新提取。
特性Attribute
如何理解特性?
一种附着物,像牡蛎吸附在船底或礁石上一样,一个船底能附着很多,可以追加上一些额外信息,比如“这个类是我写的”或者"这个函数以前出过问题",利用反射方便对具体的对象进行操作。
特性的本质是什么?
通过把编译出来的.exe文件用中间语言编译器打开,查看存储在程序集中的中间代码语言
是在调用mscorlib.dll程序集System.Diagnostics名称空间中ConditionalAttribute类的构造函数。可见,Attribute是一个有着独特实例化形式的类。
项目中的运用
- 常见的HTTP请求方式有4种,分别是[HTTPGet] [HTTPPost] [HTTPPut] [HTTPDelete] 分别对应了增删改查,不同的特性也让他们的接口操作有了不同,参数的输入方式不同,有的在Url,有的在Body里。
- HttpPost请求参数中若有文件参数,则将前面的参数加上特性[FromQuery],把前面的参数丢到Url里,body里只留文件类型,这样文件类型就不会被掩盖。
- 决不能暴露多余的传参字段给前端,自己实在要用可用[JsonIgnore]隐藏字段,或者定义单独的类来拼接。
特性[Authorize]和Token
经中间件,通过路由特性会去扫描那些类(反射),看他们有没有带[Authorize]特性,找不到就返前端报错,找得到就再把Token放到授权中心去查找对应关系,有对应关系就下一步操作,没有就返前端报错。为了防止恶意攻击,通常将[Authorize]放在整个类前面。
理解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
Db Context 实例表示与数据库的会话,可用于查询和保存实体实例, 是工作单元和存储库模式的组合。
初始化Db Context类的新实例,可以利用方法Database()提供上下文的数据库相关信息和操作的访问,利用方法Model()获取有关实体、实体之间的关系以及他们如何映射到数据库的元数据。
这是协调数据实体框架功能(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。
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支持的方法,查询服务器的性能
WebAPI工作模式 长什么样?
Repository层,数据交互层,Service层做业务逻辑的处理,Controller层,暴露接口给前端,获取响应有监听,做出操作返回数据,能让前端找得到API。

浙公网安备 33010602011771号