- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章WebAPI 实现前后端分离的示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数。全栈工程师的压力越来越大.
现在的前端的框架,既可以做各种Web,又可以做各种APP,前端框架更新换代越来越快,越来越多.
传统的模式 。
前端和后端进行调试,修改都非常麻烦。往往前端配合后端很痛苦,后端也嫌前端麻烦.
(无解,能动手解决的事,尽量别动嘴。办公室应该常备一些,绷带,止血条,速效救心丸等药品。为了阻止事态升级,办公室要加强刀具管制条例。) 。
前后端分离 。
前端根据事先约定好的文档,可以自己摸拟数据,然后开发,测试,调试UI,发布到线上时把API接口改成线上API接口,即可完事.
前端日后增加新功能,修改UI,自己修改,自己编译更新自己UI站点,发布线上只要调上线上API接口即可。并不需要麻烦到后端。两者工作进行分离.
后端需要跟前端商量好接口,写好接口文档,在接口功能上相互沟通(其实相当于需求相互沟通),一旦接口文档订好之后,只需按事先约定实现API接口即口。把项目编译好发布到线上服务器。即可完事.
后端实现WebApi接口,还可以面对各种调用,如PC端web,手机APP,或者其它设备。一个接口多种调用,实现代码去重.
工作模式分析 。
对前端和后端进行分离。各司其职,各自在自己的领域集中精力研究。更能有效的加深技术深度.
前后端分离的模式,你需要N名前端工程师和N名后端工程师.
首先我们要约定一些返回基本的格式,比如用XML,还是JSON。结果大多数前端都是喜欢JSON,因为JS天生就支持JSON.
我贴出一些示例代码:
1
2
3
4
5
|
{
"ResultCode": 1300,
"Message":"权限不足",
"Data":null,
}
|
1
2
3
4
5
6
7
8
9
|
{
"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上面.
本人推荐第二种,比较直接方便了解。示例:
1
2
3
|
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输出标头增加如何节点 。
注意有前端框架版本,对安全要求较高,不能使用通配符*,要指定跨域域名.
1
|
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默认会被传送过去.
1
2
3
4
5
|
顶级域名:baidul.com
cookies作用域:.baidu.com
二级域名:
www.baidu.com
api.baidu.com
|
示例 。
下面贴一些示例文档,其它的就不多讲啦 。
基本上,WebApi前后端分离的细节和注意点,都记录下来,还有更多的细节,需要读者在开发过程自己去寻找答案。随笔完毕! 。
以上这篇WebAPI 实现前后端分离的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://www.cnblogs.com/NET-BLOG/p/8286918.html 。
最后此篇关于WebAPI 实现前后端分离的示例的文章就讲到这里了,如果你想了解更多关于WebAPI 实现前后端分离的示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Sample data for IPv6? 除了 wireshark 在其网站上提供的内容之外,是否有可以下
我正在寻找可以集成到现有应用程序中并使用多拖放功能的示例或任何现成的解决方案。我在互联网上找到的大多数解决方案在将多个项目从 ListBox 等控件拖放到另一个 ListBox 时效果不佳。谁能指出我
我是 GATE Embedded 的新手,我尝试了简单的示例并得到了 NoClassDefFoundError。首先我会解释我尝试了什么 在 D:\project\gate-7.0 中下载并提取 Ga
是否有像 Eclipse 中的 SWT 示例那样的多合一 JFace 控件示例?搜索(在 stackoverflow.com 上使用谷歌搜索和搜索)对我没有帮助。 如果它是一个独立的应用程序或 ecl
我找不到任何可以清楚地解释如何通过 .net API(特别是 c#)使用谷歌计算引擎的内容。有没有人可以指点我什么? 附言我知道 API 引用 ( https://developers.google.
最近在做公司的一个项目时,客户需要我们定时获取他们矩阵系统的数据。在与客户进行对接时,提到他们的接口使用的目前不常用的BASIC 认证。天呢,它好不安全,容易被不法人监听,咋还在使用呀。但是没办法呀,
最近在做公司的一个项目时,客户需要我们定时获取他们矩阵系统的数据。在与客户进行对接时,提到他们的接口使用的目前不常用的BASIC 认证。天呢,它好不安全,容易被不法人监听,咋还在使用呀。但是没办法呀,
我正在尝试为我的应用程序设计配置文件格式并选择了 YAML。但是,这(显然)意味着我需要能够定义、解析和验证正确的 YAML 语法! 在配置文件中,必须有一个名为 widgets 的集合/序列。 .这
你能给我一个使用 pysmb 库连接到一些 samba 服务器的例子吗?我读过有类 smb.SMBConnection.SMBConnection(用户名、密码、my_name、remote_name
linux服务器默认通过22端口用ssh协议登录,这种不安全。今天想做限制,即允许部分来源ip连接服务器。 案例目标:通过iptables规则限制对linux服务器的登录。 处理方法:编
我一直在寻找任何 PostProjectAnalysisTask 工作代码示例,但没有看。 This页面指出 HipChat plugin使用这个钩子(Hook),但在我看来它仍然使用遗留的 Po
我发现了 GWT 的 CustomScrollPanel 以及如何自定义滚动条,但我找不到任何示例或如何设置它。是否有任何示例显示正在使用的自定义滚动条? 最佳答案 这是自定义 native 滚动条的
我正在尝试开发一个 Backbone Marionette 应用程序,我需要知道如何以最佳方式执行 CRUD(创建、读取、更新和销毁)操作。我找不到任何解释这一点的资源(仅适用于 Backbone)。
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 去年关闭。 Improve this
我需要一个提交多个单独请求的 django 表单,如果没有大量定制,我找不到如何做到这一点的示例。即,假设有一个汽车维修店使用的表格。该表格将列出商店能够进行的所有可能的维修,并且用户将选择他们想要进
我有一个 Multi-Tenancy 应用程序。然而,这个相同的应用程序有 liquibase。我需要在我的所有数据源中运行 liquibase,但是我不能使用这个 Bean。 我的应用程序.yml
我了解有关单元测试的一般思想,并已在系统中发生复杂交互的场景中使用它,但我仍然对所有这些原则结合在一起有疑问。 我们被警告不要测试框架或数据库。好的 UI 设计不适合非人工测试。 MVC 框架不包括一
我正在使用 docjure并且它的 select-columns 函数需要一个列映射。我想获取所有列而无需手动指定。 如何将以下内容生成为惰性无限向量序列 [:A :B :C :D :E ... :A
$condition使用说明和 $param在 findByAttributes在 Yii 在大多数情况下,这就是我使用 findByAttributes 的方式 Person::model()->f
我在 Ubuntu 11.10 上安装了 qtcreator sudo apt-get install qtcreator 安装的版本有:QT Creator 2.2.1、QT 4.7.3 当我启动
我是一名优秀的程序员,十分优秀!