回到目录

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

讲解:张占岭

花名:仓储大叔

主要框架:Lind.DDD

目录

  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控制。

关于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校验的新功能如下:

一、统一校验模块

二、统一参数组合的生成

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

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

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

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框架的关注,让我们一起把框架做的更好!

感谢各位!

回到目录

Lind.DDD.API核心技术分享的更多相关文章

  1. 关于Lind.DDD.Api客户端的使用与知识分享

    回到目录 关于Lind.DDD.Api的使用与客户端的调用 作者:张占岭 花名:仓储大叔 框架:Lind.DDD,Lind.DDD.Api 目录 Api里注册全局校验特性 1 Api中设置全局的Cor ...

  2. Lind.DDD敏捷领域驱动框架~介绍

    回到占占推荐博客索引 最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要 ...

  3. Lind.DDD.Manage项目核心技术分享

    回到目录 关于Lind.DDD.Manager的培训与学习 讲解:张占岭 花名:仓储大叔 主要框架:Lind.DDD,Lind.DDD.Manager 关于Lind.DDD.Manager 由于数据模 ...

  4. Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP

    回到目录 .Net MVC之所以发展的如些之好,一个很重要原因就是它公开了一组AOP的过滤器,即使用这些过滤器可以方便的拦截controller里的action,并注入我们自己的代码逻辑,向全局的异常 ...

  5. Lind.DDD.Repositories.Mongo层介绍

    回到目录 之前已经发生了 大叔之前讲过被仓储化了的Mongodb,而在大叔开发了Lind.DDD之后,决定把这个东西再搬到本框架的仓储层来,这也是大势所趋的,毕竟mongodb是最像关系数据库的NoS ...

  6. Lind.DDD.Events领域事件介绍

    回到目录 闲话多说 领域事件大叔感觉是最不好讲的一篇文章,所以拖欠了很久,但最终还是在2015年年前(阴历)把这个知识点讲一下,事件这个东西早在C#1.0时代就有了,那时学起来也是一个费劲,什么是委托 ...

  7. Lind.DDD.Authorization用户授权介绍

    回到目录 Lind.DDD.Authorization是Lind.DDD框架的组成部分,之所以把它封装到框架里,原因就是它的通用性,几乎在任何一个系统中,都少不了用户授权功能,用户授权对于任何一个系统 ...

  8. API 工程化分享

    概要 本文是学习B站毛剑老师的<API 工程化分享>的学习笔记,分享了 gRPC 中的 Proto 管理方式,Proto 分仓源码方式,Proto 独立同步方式,Proto git sub ...

  9. Lind.DDD.LindAspects方法拦截的介绍

    回到目录 什么是LindAspects 之前写了关于Aspects的文章<Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP>,今天主要在设计思想上进 ...

随机推荐

  1. 《Entity Framework 6 Recipes》中文翻译系列 (17) -----第三章 查询之分页、过滤和使用DateTime中的日期部分分组

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-12 分页和过滤 问题 你想使用分页和过滤来创建查询. 解决方案 假设你有如图3 ...

  2. Mac下安装与配置Go语言开发环境

    1.官网下载安装包(需FQ) https://storage.googleapis.com/golang/go1.7.darwin-amd64.pkg 2.配置Go环境变量GOPATH和GOBIN ( ...

  3. 【Prince2是什么】PRINCE2认证之项目四大管理步骤

    昨天谈到PRINCE2要求项目经理在做项目的时候要考虑四大核心指标(成本.时间.质量.范围)加风险与收益这两个重要要素. 然后PRINCE2基于这几大要素进行了四大管理步骤,分别是: 1.计划 2.授 ...

  4. Linux Hadoop2.7.3 安装(单机模式) 二

    Linux Hadoop2.7.3 安装(单机模式) 一 Linux Hadoop2.7.3 安装(单机模式) 二 YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的Jo ...

  5. 通过对表格数据的选择对input的value进行修改

    通过对表格数据的选择对input的value进行修改 $(function(){ $("#tb_gys").datagrid({ url:'getGysinfoList.actio ...

  6. Sql Server系列:数据表操作

    表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...

  7. 【Win 10应用开发】认识一下UAP项目

    Windows 10 SDK预览版需要10030以上版本号的Win 10预览版系统才能使用.之前我安装的9926的系统,然后安装VS 2015 CTP 6,再装Win 10 SDK,但是在新建项目后, ...

  8. n个结点,不同形态的二叉树(数目+生成)

    题目链接: 不同的二叉查找树:http://www.lintcode.com/zh-cn/problem/unique-binary-search-trees/ 不同的二叉查找树 II:http:// ...

  9. 窥探Swift之别样的枚举类型

    想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了.Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性.在 ...

  10. 把《c++ primer》读薄(3-1 标准库string类型初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...