WebAPI 实现先后端分离

随着Web技术的发展,如今各类框架,前端的,后端的,数不胜数。全栈工程师的压力愈来愈大。前端

如今的前端的框架,既能够作各类Web,又能够作各类APP,前端框架更新换代愈来愈快,愈来愈多。web

传统的模式后端

前端和后端进行调试,修改都很是麻烦。每每前端配合后端很痛苦,后端也嫌前端麻烦。api

(无解,能动手解决的事,尽可能别动嘴。办公室应该常备一些,绷带,止血条,速效救心丸等药品。为了阻止事态升级,办公室要增强刀具管制条例。)跨域

先后端分离浏览器

前端根据事先约定好的文档,能够本身摸拟数据,而后开发,测试,调试UI,发布到线上时把API接口改为线上API接口,便可完事。安全

前端往后增长新功能,修改UI,本身修改,本身编译更新本身UI站点,发布线上只要调上线上API接口便可。并不须要麻烦到后端。二者工做进行分离。前端框架

后端须要跟前端商量好接口,写好接口文档,在接口功能上相互沟通(其实至关于需求相互沟通),一旦接口文档订好以后,只需按事先约定实现API接口即口。把项目编译好发布到线上服务器。便可完事。服务器

后端实现WebApi接口,还能够面对各类调用,如PC端web,手机APP,或者其它设备。一个接口多种调用,实现代码去重。restful

工做模式分析

对前端和后端进行分离。各司其职,各自在本身的领域集中精力研究。更能有效的加深技术深度。

 

先后端分离的模式,你须要N名前端工程师和N名后端工程师。

首先咱们要约定一些返回基本的格式,好比用XML,仍是JSON。结果大多数前端都是喜欢JSON,由于JS天生就支持JSON。我贴出一些示例代码

  {
    "ResultCode": 1300,
    "Message":"权限不足",
    "Data":null,
  }
复制代码
  {
    "ResultCode": 1600,
    "Message":"逻辑异常",
    "Data":null,
    "DetailError":{
    "ErrCode":1601001,
    "ErrMsg":"金额必须大于>0"
    }
  }

复制代码

返回参数说明

参数名 类型 是否必有 说明
ResultCode int 返回码
Message string 结果说明
DetailError josn 具体错误
Data josn 数据

 

 

 

 

 

 

 

 

ResultCode

ResultCode 说明
1000 成功
1100 服务器异常
1200 身份验证异常
1300 权限不足
1400 传递参数验证不经过
1500 版本异常
1600 业务逻辑异常
1700 系统成升级中
1800 该接口己弃用

 

 

 

 

 

 

 

 

 

 

具体异常

这是一个有点争议的地方,有不少业务逻辑异常,出于对用户的友好提示。一些生涩难懂的错误提示,直接给到用户,用户一脸懵逼。可是后端却不能修改为友好提示,这样不方便调试,寻找问题缘由。

通常来说,前端能够自动修改友好提示给用户。

若是后端返回字符串,前端写死在代码中,万一,某一天后端认为这个描述更符合场景,修改的字符串。敌军还有30秒到达战场。

建议:尽可能使用异常代码,你们能够看到上面贴出例子,就使用的异常代码。每种异常都有惟一编号,描述能够更改。可是编号不变。

用户异常(1601000) 说明
1601001 帐号/密码错误
1601002 帐号被冰冻
1601003 原密码不对

 

 

 

 

版本控制

 每一个API都有一个版本,其实也是就针对APP,若是是WEB端的,都是直接升级的由于B/S结构自己就是存在升级方便的优点,只须要把服务端更新就能够了。

版本控制通常用两种方式

第一种:URL不变,版本写在HTTP标头内面。

第二种:版本写在URL上面。

本人推荐第二种,比较直接方便了解。示例:

http://www.xxx.com/版本号

当前版本号:v1

http://www.baidu.com/v1/UserSecurity/Login

API风格

如今流行的api风格比较多,最出名的就是restful风格。

按本人的经验,彻底走restful风格是很困难的,可能也是水平问题,在团队内面也要考虑到其它成员的水平问题。咱们目前API风格仍是保留之前风格。

示例,V*表明版本号

http://xx.com/V*/UserSecurity/SignOut

HTTP谓词

使用 Post 方法在服务器上建立/修改/删除资源

使用 Get 方法从服务器检索某个资源或者资源集合

基本命名规则

使用骆驼式命名法-大驼峰法

跨域处理

前端站点和后端API布署到不一样的站点,就会产生跨域问题。

什么是同源策略?

同源是域名,协议,端口相同。也就是说若是不一样,则是非同源。

同源策略是浏览器的一基本的安全功能,非同源访问,浏览器会进行拒绝。

HMTL上面的SRC地址,你能够指定任何URL,表单提交,你能够提交到任何URL。

可是,你若是使用AJAX技术,就会受到同源策略的影响,拒绝提交。

现代浏览器几乎都支持跨域资源请求的一种方式。这种技术叫CORS(跨域资源共享)

CORS跨域分两种

第一种,简单跨域。

第二种,复杂跨域。

解决方案:HTTP输出标头增长如何节点

注意有前端框架版本,对安全要求较高,不能使用通配符*,要指定跨域域名。

Access-Control-Allow-Origin:*

 

下面节点可填,可不填,根据实际状况,自行决定。

1
2
3
Access-Control-Allow-Methods:GET,POST,OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers:根据请求头的内容,填写

  

注意:复杂跨域比要简单跨域麻烦,更花费性能。由于复杂跨域在请求以前会先发一个options预请求,根据响应判断服务器是否支持跨域。也就是说,实际上请求了两次。

Cookies做用域

不一样的站点,如何通用Cookies?

通常状况只需把cookies做用域设置顶级域名,浏览器会自动把cookies在访问子域名的时候捎上去。

示例,访问二级域名时候,cookies默认会被传送过去。

顶级域名:baidul.com
cookies做用域:.baidu.com
二级域名:
www.baidu.com
api.baidu.com

 

示例

下面贴一些示例文档,其它的就很少讲啦

 

基本上,WebApi先后端分离的细节和注意点,都记录下来,还有更多的细节,须要读者在开发过程本身去寻找答案。随笔完毕!

相关文章
相关标签/搜索