软件开发框架-WebApi后端框架培训大纲(1)


软件开发框架-WebApi后端框架培训大纲(1)

 

什么是WebApi?

API(Application Programming Interface),指应用程序编程接口。

Web API(Web Application Programming Interface),指基于HTTP协议的编程接口,WebApi接口一般定义HTTP的请求方法、请求路径、参数、响应数据格式、响应HTTP Code等。至于HTTP Server(HTTP服务器,Web服务器),可以用Java、.Net、Nodejs等各种框架实现,HTTP Server属于Web API的实现。

 

当前比较流行的WebApi应用是基于ASP.NET的MVC架构衍生产品,微软最新发布的.NET Core API支持跨平台部署,而不仅仅受限于部署在Windows服务器,可以部署在Linux, Unix, Windows等服务器。

 

ASP.NET Web API体系架构图

软件开发框架-WebApi后端框架培训大纲(1)

 

CSFramework.WebApi服务端开发框架

WebApi基于C#.NET开发,支持三种宿主方式部署在 Windows服务器。

产品详情:http://www.csframework.com/cs-framework-webapi-1.0.htm

适用快速搭建APP、B/S、C/S、微信小程序、公众号、Web站点等后端应用服务程序。

 

WebApi开发框架项目组成:

软件开发框架-WebApi后端框架培训大纲(1)

微信小程序必须生产环境必须采用HTTPS协议。

建议阿里云申请或购买SSL证书,其他云产品如 ECS, OSS, 短信推送等服务。

 

将升级.Net CORE版本,.NET Core可以跨平台部署服务端,

支持 Linux, Unix,Windows等操作系统平台。

 

WebApi应用服务:支持3种承载方式。

http://www.csframework.com/archive/1/arc-1-20200217-2724.htm

 

1.IIS承载安装SSL证书,简单。

2.Self Hosting自承载:用于开发调试。

3.Win服务承载,如何部署SSL证书???官网搜索:

软件开发框架-WebApi后端框架培训大纲(1)

 

WebApi服务是个Web应用服务器,建议应用服务器与数据库服务器分离。

 

如何调试WebApi接口?

1.开发环境调试,VS跟踪调试。

2.使用:PostMan工具调试测试环境或生产环境。

 

HTTP交互方式

 

WebApi接口基于HTTP/HTTPS协议与服务器交互通信。

HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。

 

CSFramework.WebApi,通过HTTP GET/HTTP POST两种方式(Method)提交数据。

 

HTTP GET:浏览器输入URL,回车,从服务器返回数据。

如:http://www.csframework.com/action.aspx?a=111&b=2222

它仅仅是获取资源信息,像数据库查询一样,不会修改和增加数据,不会影响资源的状态。

 

HTTP POST: 向服务器提交表单数据。比如前端界面完成数据录入,点【提交】按钮,将数据提交给服务器处理。

 

WebApi接口数据交换格式: 

 

当前比较流行的几种与服务器交互的数据格式:

XML

JSON

YAML

 

什么是XML?

XML 指可扩展标记语言(EXtensible Markup Language),类似HTML。

XML 的设计宗旨是传输数据,而非显示数据。

XML 被设计为具有自我描述性。

XML 是 W3C 的推荐标准

XML是当前编程中最为流行的数据交换格式,拥有跨平台、跨语言的优势。

 

 

什么是JSON?

JSON(JavaScript Object Notation JS 对象简谱) 

是一种轻量级的数据交换格式。

采用完全独立于编程语言的文本格式来存储和表示数据。

易于人阅读和编写。同时也易于机器解析和生成。

JSON格式化工具:https://www.bejson.com/

 

什么是YAML?

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的缩写。

 

什么是ASP.NET MVC控制器(Controller)?

Controller是MVC中连接Model和View的中间桥梁,Controller中文意思是控制器,也就是起到一个获取请求信息,控制返回结果,控制跳转页面等的使用。

MVC中的控制器派生自Controller类。

当Controller中的一个具体Action接收到URL请求,会调用我们的业务代码,操作领域对象,最后根据得到的结果选择相应的视图返回给客户端。

 

什么是ASP.NET WebApi控制器(APIController)?

ApiController中文意思是应用编程接口控制器,也就是起到一个获取请求信息,控制返回结果。

ApiController与MVC中的控制器功能大致相同。

ApiController用于返回已序列化的数据给客户端,如JSON格式的数据。

Web API中的控制器派生自ApiController类而不是Controller类。

 

Web API控制器操作不返回视图,它们仅返回数据,JSON/XML格式的数据。

 

WebApi接口是通过控制器(Controller)实现的。

在控制器里面定义具体的方法即可,如:GetData, PostData。

 

CSFramework.WebApi框架提供5个标准控制器:

1.DoController (定义业务操作接口, api/do)

2.GateController(门禁,Login, Logout)

3.FileController(文件,Upload,Download,Delete,Rename)

4.ImageController(图片,Upload,Download,Delete,Rename)

5.SystemController(系统控制器:用户、Apikey缓存,Token缓存)

 

WebApi服务器接口安全、数据安全6大机制

(WebApi框架提供6个安全机制):

软件开发框架-WebApi后端框架培训大纲(1)

ApiKey(公钥): 

给应用程序开发者分配的公钥(用户身份证,唯一标识, 明文传输), 提供给:平台的合作伙伴、供应商、客户等。

比如我们的WebApi服务器,要开放接口给客户使用,分配给喜鹊科技一个Apikey:

公钥:5A02D19B-0397-497E-87EF-B4C8263F741E

私钥:6A02D19B-0397-497E-87EF-B4C826366666

 

安全机制:当用户访问接口时,最先判断ApiKey是否在WebApi服务器存在!!!

 

HTTPPOST: act.aspx?apikey=5A02D19B-0397-497E-87EF-B4C8263F741E

 

SecreKey(私钥):用于数字签名。

私钥的特点:WebAPI接口不传输参数,公钥和私钥是1对1,一个公钥配对一个私钥。

 

Api_UserKeys : API用户表。

软件开发框架-WebApi后端框架培训大纲(1)

WebApi接口的数字签名(Data Sign)机制

WebApi接口的数字签名用于接口数据安全以及用户认证防篡改。

防篡改,顾名思义就是防止有人恶意篡改请求数据以达到恶意攻击的目的。

基本原理:将要请求的数据加上ApiKey(公钥)、SecreKey(私钥),按规则组织成一个字符串,获取对应的MD5摘要,然后将该摘要及公钥同时作为请求的参数一起传递(私钥禁止传递)给WebApi服务器。

基本流程:

客户端数字签名(MD5数据加密)

格式:partner=公钥&orderNo=业务数据&sign=MD5签名

格式:partner=3122131212&orderNo=1234567&sign=EBFE84D02E8E40952899EE5CDFE5404C

签名算法:MD5(partner+orderNo+私钥), MD5三个参数的值。

服务端签名校验(解密)

首先通过请求的ApiKey获取对应的私钥,然后通过上述签名算法计算MD5值,

对比请求的sign参数与计算结果是否一致,若不一致,数据被篡改。

 

客户端调用Webapi接口的标准参数模型:

 

请求数据(JSON)

C# 全选
{
Apikey: 5A02D19B-0397-497E-87EF-B4C8263F741E(表明身份)
Data:“我要获取数据” (目的)
Sign: 8dfa959cd5db1ead40a29c56cfe176ec (数字签名,md5算法,不可逆)
}

签名的公式:Sign=md5(Apikey+Data+SecretKey)

Md5(5A02D19B-0397-497E-87EF-B4C8263F741E我要获取数据6A02D19B-0397-497E-87EF-B4C826366666)

 

注意事项:

1.客户端程序对SecretKey绝对不可泄露!若发布的程序没有加壳或加密,会泄露私钥!

2.Web端不能使用明文私钥进行数字签名!用Token替代私钥!!!

3.若采用Token机制,可通过Token动态获取私钥并在内存缓存起来使用。

 

服务端验证数字签名:

 

验证签名的公式:Sign=md5(Request.Apikey+ Request.data+SecretKey)

1.根据Apikey从数据库获取私钥,设私钥=P,P的值:

6A02D19B-0397-497E-87EF-B4C826366666

2.服务器根据Request的数据计算MD5,

公式:Sign=md5(Request.ApiKey+Request.Data+P)

服务端计算MD5:

Sign=md5(5A02D19B-0397-497E-87EF-B4C8263F741E 我要获取数据6A02D19B-0397-497E-87EF-B4C826366666)

服务器计算的签名(S) =8dfa959cd5db1ead40a29c56cfe176ec

3.比较Request.sign=S, 若值相等是正常访问,不相等是非法访问或数据被篡改!

 

Token:令牌,访问接口的身份标识。

每次登录系统生成一个标识,存储在Api_UserToken表。 有过期特征,若要维持Token不过期,要保持访问接口活动状态。因此,访问接口时,会刷新当前用户的活动时间,重置初始状态。心跳机制。

Token过期:web.config设置,TokenExpireMinutes参数, (默认值)。

若api_user表的TokenExpires=null, 则取web.config的TokenExpiresMinutes参数。

 

应用:手机APP程序、Web系统, 基于C/S架构的WCF服务。

每次访问接口要传递令牌参数。

 

若过期,系统抛出访问异常:令牌已过期!重新登录。

软件开发框架-WebApi后端框架培训大纲(1)

用户表 Api_User:

软件开发框架-WebApi后端框架培训大纲(1)

用于APP移动端系统, Web系统,手机用户管理。

Account: 系统账号

Pwd:密码,Md5

Phone:手机号码

TokenExpires:Token过期时间(minutes), 15分、7天,15天,月,用不过期。

 

黑名单sys_IP_Blacklist:

客户端访问(Request)请求,会带有终端(Client)信息,比如:IP,操作系统,时间。

后台系统判断当前IP是否黑名单,黑名单用户拒绝访问接口的。

判断黑名单的优先级最高!!!

 

白名单sys_IP_Whitelist:

优先通道用户。比如后台系统有10级安全检查,若是白名单用户,只需3级检查。

 

限流:Throttling, 针对用户访问接口的频率进行控制。

同一个IP每秒种对XX接口访问3次。

结合路由器的ddos+WebApi的限流,确保服务器及应用程序安全。

Throttling是三方插件(dll)。

 

CSFramework WebApi日志管理

软件开发框架-WebApi后端框架培训大纲(1)

登录日志(sys_LoginHistory),记录用户登入登出信息。

日志库(CSFramework_WebAPI_Log)

系统日志sys_Log:记录系统异常,用户自定义类型的消息。LogType区分。

SMS,Login,Request,Sync2GW,Logout,Whitelist

任何请求都会记录,表的数据量巨大。定期清理。

 

接口访问日志sys_Log_ApiVistior

执行到命令处理层才写入接口访问日志。

软件开发框架-WebApi后端框架培训大纲(1)

文件日志:sys_Log_FileUpDown

记录文件上传,下载时间,文件名,用户,时间。

 

ModelRequest标准请求类:

ApiKey:

Sign:

Data: 提交的业务数据, 自定义内容。JSON,字符串。

DataIsEncrypt: 是否加密。对称加密。若data属性的数据是加密的,此参数必须true.

软件开发框架-WebApi后端框架培训大纲(1)

标准请求类用于自定义WebApi接口。举例,客户管理接口,

+GetCustomer(ModelRequest)

C# 全选
ApiKey:xxxxxxxxxxxxxxxxxxx

Sign:md5xxxxxxxxxxxxxxxx

Data: 客户编码, C0000001

DataIsEncrypt: false

Query(ModelRequest)

C# 全选
Data: {Name:XXX, Phone:138xxx} //JSON,多条件查询。

DeleteCustomer(ModelRequest)

 

ModelRequestAction通用请求类:

Action: 数字,接口编号(InterfaceCode)。如:180001, 命令编码。

ClientData: 终端信息,JSON格式。APP请求:IP, MID设备码,anroid/ios, Crome,FirFox, 软件的版本号。

Operation:具体的操作,如:180001是客户管理,OP=(Get/Delete/Query)

 

+Do (ModelRequestAction)

C# 全选
Act: 180001客户管理
ApiKey:xxxxxxxxxxxxxxxxxxx
Sign:md5xxxxxxxxxxxxxxxx
Data: 客户编码, C0000001
DataIsEncrypt: false
Cdata:{MID:M2345122A,OS:Android}
Op:Get

ModelResponse服务器响应:返回到客户的数据。

Code:0,-1

Message:

Data: 具体的业务数据,比如GetCustomer,返回客户列表(JSON)。

 

控制器(接口层):

1.集成ApiController

2.地址路由,给类定义RoutePrefix特性。自定义URL地址, 基地址后面部分。

如:http://localhost:19888/api/do/ActionName

每个控制器必须定义一个路由!

3.ActionName:定义接口名称。

软件开发框架-WebApi后端框架培训大纲(1)

具体访问地址:http://localhost:19888/api/do/post

若接口没定义ActionName, 路由地址就是方法名称,如:

http://localhost:19888/api/do/DoPostObject

4.HttpPost/HttpGet:定义接口的请求方式(Http Method)

软件开发框架-WebApi后端框架培训大纲(1)

软件开发框架-WebApi后端框架培训大纲(1)

5.控制器2种接口参数,ModelRequest/ ModelRequestAction

软件开发框架-WebApi后端框架培训大纲(1)

标准参数请求特点:必须定义具体的方法名,如SaveProduct/ DeleteOrder

软件开发框架-WebApi后端框架培训大纲(1)

通用参数请求特点:1个接口搞定,缺点:负荷大。

 

命令层:理解为BLL

1.CommandHandler: 命令处理程序。主要功能,

1.1校验数字签名

1.2根据接口编码(ActionID),获得对应的Command层(BLL)

1.3执行命令 Command.Execute()

2.命令(Command)

2.1CommandAttribute: 定义命令的编号,以及名称。

2.2命令层聚合DAL层。BLL→DAL→db

2.3Accept方法(CheckData), 用于校验数据, 检查数据完整性。若检查不通过,返回到前端提示。检查通过,调用Execute方法。

2.4Execute方法, 执行命令。根据Operation标识,执行具体的操作。

 

DAL层

Model(实体类)

3.实体类的SQL命令生成器

4.Update,基于ADO.NET提交。最好的方式是采用Entity Framework机制。

 

WebApi接口的参数是:前端:ObjectJSON, 后端:JSON→Object

WCF接口的参数是:前端:DataSetbyte[], 后端:byte[]→DataSet

 

为什么C/S框架前端不用实体类?

最主要的原因是数据列表的处理。表格呈现方式, 明细表对象状态的控制, 表格的数据源是支持object。

GridControl.DataSource=object. 

1.DataTabel

2.List<Object>

3.比如报表数据,关联查询,跨表的。2007, Entity Framework没有。

 

1 Add,,,2Edit,,,3Delete , 4,Unchanged

DataTable完美解决。

 

LINQ优势:

1.把SQL逻辑搬到前端。

2.跨数据库!

 

如何部署WebApi服务器?

1.部署IIS服务器

http://www.csframework.com/archive/1/arc-1-20200223-2738.htm

http://www.csframework.com/archive/1/arc-1-20170923-2355.htm

2.部署Win服务器

软件开发框架-WebApi后端框架培训大纲(1)

http://www.csframework.com/archive/1/arc-1-20200212-2707.htm

3.SelfHosting不需要部署的。

软件开发框架-WebApi后端框架培训大纲(1)

4.如何在Windows服务部署基于HTTPS协议的WebApi服务

5.如何在IIS部署HTTPS协议,SSL证书.

 

Console.Write(“xxxxx”);

软件开发框架-WebApi后端框架培训大纲(1)

 

根据你们项目如何定义控制器?

可以根据业务模块定义控制器。

1)控制器名字要规范:XXXXController

软件开发框架-WebApi后端框架培训大纲(1)

2)路由格式要一致:api/XXXX, WebApiRouteConfig

软件开发框架-WebApi后端框架培训大纲(1)

1.定义一个接口, 分别实现以下两种参数:

ModelRequest

ModelRequestAction

 

2.处理数据, Command层。

同时调试Client,Server, 建议分屏开发!

笔记本配置1个液晶显示器,21寸。

配置固态硬盘C:

程序员成本高, 

 

WebApi Tools ,管理员工具

1.管理与维护WebApi服务器的后台数据

2.代码生成器,用于快速生成DAL,Model,Command代码。

 

BUG:

1生成Command命令, 需要填写接口编号。

2注册失败

 

2.生成Command, 接口

软件开发框架-WebApi后端框架培训大纲(1)

 

http://webapi.csframework.com/Login.html

jonny

test

 

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:软件开发框架培训内容大全 - CSFrameworkV5.1旗舰版
下一篇:软件开发框架培训实时讲解总结-CSFrameworkV5.1旗舰版
评论列表

发表评论

评论内容
昵称:
关联文章

软件开发框架-WebApi框架培训大纲1
C#.Net培训大纲(学习重点)
Demo调用WebApi接口 - CSFramework.WebApi开发框架
CSFramework.WebApi框架软件截图
Demo开发环境配置 - CSFramework.WebApi开发框架
CSFramework.WebApi开发框架APP框架
Web开发框架WebApi主流开发框架介绍
CSFramework.WebApi开发框架服务器宿主承载方式
CSFramework.WebApi框架 - 软件著作权登记证书
.Net框架|WebApi服务开发框架|C/S框架网原创作品
微信小程序框架|微信公众号框架(C# WebAPI
软件开发框架培训内容大全 - CSFrameworkV5.1旗舰版
CSFramework.WebApi快速开发框架|APP开发框架 v2.0
CSFramework.WebApi框架 - 系统配置 - app.config
GateController – 系统安全门禁控制器 - CSFramework.WebApi框架
FileController – 文件管理控制器 - CSFramework.WebApi框架
ImageController – 图片资源控制器 - CSFramework.WebApi框架
SystemController – 系统管理控制器 - CSFramework.WebApi框架
CSFramework.WebApi框架 - 压力测试报告 - 软件测试报告
WebApi快速开发框架,C# ASP.NET开发平台