Lind.DDD.API核心技术分享

回到目录html

关于Lind.DDD框架里API框架的技术点说明redis

讲解:张占岭sql

花名:仓储大叔数据库

主要框架:Lind.DDDapi

目录

  1. 关于Lind.DDD.Authorization
  2. 关于受权的原理
  3. 关于ApiValidateModelConfig
  4. 关于Lind.DDD.CacheConfigFile
  5. 如何为你的API项目注入受权模块
  6. 关于服务端收取过滤器ApiValiadateFilter
  7. 如何在客户端生产加密受权串
  8. 关于请求类与响应类
  9. 客户端如何作分页

 

关于Lind.DDD.Authorization

Lind.DDD为咱们提交了强大的API校验组件,只须要在全局或者要受权的controller上添加对应的过滤器便可完成受权的过程,这样,你的API就安全多了。数组

关于受权的原理

客户端在向API服务端获取数据时,须要先申请一个appkey做为本身的标识,固然这也是双方约定的,咱们能够叫作公钥,而真正作数据校验的不是它,它只是一个惟一标识,对外公开,真正作数据加密的叫passKey它是保存在双方内部的,不对外公开因此叫密钥,在客户端向API服务端通信时,须要将这个passKey连同参数和appkey传到服务端,由服务端作相同的校验码生产逻辑,最后二者进行比较,相同即验证经过。缓存

 

关于ApiValidateModelConfig

ApiValidateModelConfig主要在服务端存储全部被收取的客户端的信息,它是一个列表集合,由AppKey,AppName,PassKey,ExpireDate等元素组成,它们具体的含义以下:安全

 

而这个实体在服务端校验时,会从配置文件XML中反射出来,以遍进行比较,固然,你的配置文件若是没有修改,它会直接从内存里进行获取,这个逻辑由CacheConfig控制。app

关于Lind.DDD.CacheConfigFile

它在早期的大叔框架里就已经出来了,主要用于作配置文件缓存的,当缓存文件被修改后,它的信息将从新被加载,不然将从内在中来进行获取,这个文件须要管理员在服务端进行维护,在添加和删除配置时,须要作修改,固然,咱们也彻底能够把它持久化到其它数据库里,如sqlserver,redis等介质。框架

 

如何为你的API项目注入受权模块

API项目注入受权功能非常容易,直接在对应的controller上添加过滤器Lind.DDD.Authorization.Api.ApiValiadateFilter便可。

 

或者在Global.asax里添加全局的过滤,也是能够的,值得注意的是,若是你添加的是全局过滤器,若是但愿有一些Controller不被受权,便可以被匿名访问,那你也只须要为指定的控制器添加AllowAnonymous特性便可。

 

关于服务端收取过滤器ApiValiadateFilter

ApiValiadateFilter是服务端的收取核心组件,它会拦截指定的api控制器,而后进行受权检查,若是没有被标示AllowAnonymous,它将会进行校验,具体就是将请求参数进行排序,组件,并连同passkey(由客户端传来的appKey进行查询,获得的ApiValidateModel实体)生成新的MD5加密串,与客户端传过来的密钥进行对比,匹配即有效,不然返回403无权访问,最新的api校验的新功能以下:

1、统一校验模块

2、统一参数组合的生成

3、UTC时间戳的引入,参数有效性校验(1小时有效)

4、双方约定的密钥,请求的防伪造

如何在客户端生产加密受权串

Lind.DDD框架为咱们提供了生成请求密钥的方法,你须要作的只是将全部参数添加到字典,而后调用对应的方法便可,这对于.net开发人员来讲,绝对是个福音!

 

关于请求类与响应类

API服务端与客户端约定了请求与响应的模型,它们都是抽象类,提供最基础的功能,下面简单说一下:

l 请求对象

对应于DTO请求类,它继承自抽象类RequestBase,它提供了传输标示,分页,排序,筛选字段等功能。

 

l 响应对象

对应于DTO响应类,它继承自抽象类ResponseBase,它提供了RequestBase里的传输标示,标明了是否为同一个请求,响应的字段等。

 

l 响应返回对象

对应于DTO的返回结果,它由密封类ResponseMessage提供,返回它的实例便可,它会提供返回状态码,惟一标识,返回对象,错误码和错误信息等。

 

客户端如何作分页

分页对于每一个项目来讲都是必要的,对于面向服务的API来讲了是必须的,咱们Lind.DDD对分页必定进行了封装,在这里为你们简单说一下。

统一的DTO请求基类RequestBase,它主要实现请求方调用时的字段过滤(ContainFields),分页控制(Page),传输标示(GuidKey),按字段排序时(Sort),请求方只须要传输相应的参数便可,代码以下:

 

在服务端进行分页方法实现时,返回统一的Lind.DDD.Paging.PagedList<T>对象,而在业务方法处理时,只须要调用请求类的GetPageParameters()方法便可拿到客户端传来的分页对象,而从数据库查出来的对象也可使用MapToPage<T>()这个方法来映射成指的DTO对象,代码以下:

 

感谢各位对Lind.DDD框架的关注,让咱们一块儿把框架作的更好!

感谢各位!

回到目录