diff --git a/SUMMARY.md b/SUMMARY.md index 131a9ad..1b43f92 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -48,7 +48,10 @@ * [开发规范](kai_fa_gui_fan.md) * [PHP编码规范](phpbian_ma_gui_fan.md) * [PSR-0规范](psr-0gui_fan.md) + * [API编写规范](api.md) +* 工具 * [工具](.md) +>>>>>>> pm/master * [Git](git.md) * [工具类](gong_ju_lei.md) * [服务器端轮子](fu_wu_qi_duan_lun_zi.md) @@ -65,7 +68,7 @@ ## OOP思想 * [为什么使用OOP](oop/oop.md) -* 几大原则 +* [几大原则](oop/.md) * [01单一权责原则](dan_yi_quan_ze_yuan_ze.md) * [02开放闭合原则](kai_fang_bi_he_yuan_ze.md) * [03里氏代换原则](03li_shi_dai_huan_yuan_ze.md) @@ -87,7 +90,7 @@ * [VIPER](viper.md) * [SOA](soa.md) * [AOP](aop.md) - * VOP + * [VOP](vop.md) * [POP](pop.md) ## 设计模式 @@ -126,8 +129,8 @@ ## 重构&代码整洁 -* 重构 -* 代码整洁 +* [重构 ](.md) +* [代码整洁](.md) * [开始CodeReview](kai_shi_codereview.md) * [为什么codeReview](wei_shi_yao_codereview.md) @@ -142,6 +145,7 @@ * [rc.local开机启动](rclocalkai_ji_qi_dong.md) * [linux常用命令](linuxchang_yong_ming_ling.md) * [lrzsz上传下载命令](lrzszshang_chuan_xia_zai_ming_ling.md) + * [Monitor配置](monitor.md) * 工具 * [Docker](docker.md) * [Docker常用命令](dockerchang_yong_ming_ling.md) diff --git a/api.md b/api.md new file mode 100644 index 0000000..6c8608b --- /dev/null +++ b/api.md @@ -0,0 +1,32 @@ +#移动开发接口及文档编写规范 +>APP接口是移动设备和业务之间进行通信的途径。实质就是以特定的规则通过接口直接操作数据库的增删改查。 + +##接口编写原则 +###实用性 +编写接口API应遵从实用性原则。 +1、**数据格式**:推荐使用JSON格式数据,因为JSON有较好的跨平台性,以及数据格式占用字节数较少,当然也可采用XML、TEXT作为程序开发辅助。 +2、**接口执行效率(接口访问速度)**:APP有别于WEB服务,对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所有在开发过程中尽量选择效率高的框架,PHP推荐使用YAF框架,.NET推荐使用Newtonsoft +3、**数据量**:按需分配,APP客户端需要什么数据就返回什么数据,过多的数据量影响处理速度,最重要的是影响传输效率和浪费用户流量。 +4、**API缓存**:这点比较重要,不管是文件缓存还是memcache缓存。 +###易用性 +1、**接口、参数命名准确**:无论是接口还是参数,命名都应该有意义,让人一目了然。(接口推荐根据APP效果图栏目进行命名) +2、**一个页面尽可能就用一个接口**:现在很多的APP页面都有广告、焦点图、文章列表等,对于这些不同格式的数据,不可能都分配一个接口,这样加大了APP请求接口数,影响响应速度。建议服务器端尽可能处理好数据后通过一个接口返回给APP客户端。 +3、**接口数据、状态**:接口必须提供明确的数据状态信息,不管是成功的,还是失败的,都必须返回给APP客户端。 +4、**接口要有可扩展性**:方便后期功能性调整,接口应具备可扩展性。 +###安全性 +1、**接口安全**:目前一般都是在APP客户端和服务器通过约定的算法,对传递的参数值进行验证匹配。但是如果APP程序被反编译,这些约定的算法就会暴露,特别是在安卓APP中,有了算法,完全就可以通过验证模拟接口请求。 +2、**加密规范**:在传递用户名密码时,应采用规范的加密算法如MD5、RSA、DES,进行数据通信请求。 +3、**接口版本控制**:对于接口版本控制,需要应对不断的APP版本升级,新、旧接口的处理,因而需要关注接口版本控制。 +##接口设计原则 +1、**尽量减少参数传递**:在客户端发起HTTP请求接口操作时,应减少参数传递,如某些操作只需要ID不需要其他参数,这时候就应该只传递ID这个参数。 +2、**尽量避免接口重复性**:在客户端APP调用接口时,尽量提高接口复用性,减少HTTP请求,提高程序稳定性。 +3、**数据类型规范**:客户端APP调用接口时,应标注参数数据类型,以及是否可为空或者默认字段,如标注了Int型字段,就不能返回“null”的String类型字段,否则容易造成程序APP出现数据类型解析异常。 +4、**设置调用html页面单独列表**:调用html页面应标明是否传递安全校验参数,建议表格中采用是或者否单独字段标识。 +5、**编码规范**:整个API接口开发过程中,应标注接口编码方式,目前建议采用UTF-8编码,UTF-8通用性以及URL请求方面都较规范。 +6、**请求方式**:编写API接口应该标注请求方式,请求方式一般有GET和POST方式 +7、**GET和POST方式**:在数量较小情况下可以使用GET方式,但数据量超过1024字节就应该采用POST方式,避免出现请求失败或者请求异常的问题。 +8、**返回接口调用状态**:所有API接口都应该统一标识调用的成功失败信息和规范错误编码信息,以及必要的提示字段信息。 +9、**安全机制**:接口应规范验证签名机制,用户登录后统一调用KEY对接口安全验证。(关于KEY机制需由接口开发人员定义) +10、**参数说明**:应标注参数名称、是否必选、数据类型及范围、说明以及“否(必选)”传递默认的参数。 + + diff --git a/dan_yi_quan_ze_yuan_ze.md b/dan_yi_quan_ze_yuan_ze.md index 4b21c5b..6cac3d2 100644 --- a/dan_yi_quan_ze_yuan_ze.md +++ b/dan_yi_quan_ze_yuan_ze.md @@ -1,10 +1,6 @@ # 单一权责原则 - - - > 单一职责原则 (Single Responsibility Principle,SRP) 指出,每个方法或类应当有且仅有一个改变的理由。 - 这意味着每个方法或类应当做一件事情,或者只有一项职责。在所有的SOLID 原则中,这是大多数开发人员感到最能完全理解的一条。严格来说,这也可能是违反最频繁的一条原则了。 diff --git a/dian_zi_shu.md b/dian_zi_shu.md index 9b85b42..db78bd6 100644 --- a/dian_zi_shu.md +++ b/dian_zi_shu.md @@ -7,6 +7,8 @@ [《PHP之道》](http://wulijun.github.io/php-the-right-way/) +[《PHP核心技术与最佳实践》](http://vdisk.weibo.com/s/zJSMO-iFNr2UT?category_id=35&parents_ref=zJSMO-iFMQi_B) + [《JavaScript 标准参考教程(alpha)》](http://javascript.ruanyifeng.com/) [《ECMAScript 6入门》](http://es6.ruanyifeng.com/) diff --git a/monitor.md b/monitor.md new file mode 100644 index 0000000..f83870b --- /dev/null +++ b/monitor.md @@ -0,0 +1,63 @@ +# Monit 安装配置 + +##1.安装Monit + 下载地址 https://mmonit.com/monit/ 需要下载源码 + yum安装需要装依赖 + ``` + yum install epel* + yum install pam-devel + yum insall pam + yum install monit + ``` + +###源码安装 +``` +./configure #错误 +configure: error: PAM enabled but headers or library not found, install the PAM development support or run configure --without-pam +yum install pam-devel +yum install pam #即可解决 +make +make install +``` + +##2.配置 +``` +mv monitrc /etc/monitrc +chown root:root /etc/monitrc +chmod 0700 /etc/monitrc + +monit -t #检查 配置文件是否正确 +New Monit id: 0414eed13ff8027c154d0555e9f7f97f +Stored in '/root/.monit.id' + +monit +monit start nginx +monit stop all /nginx +``` + +##3.配置web访问 + +set httpd port 2812 and + #use address all # only accept connection from localhost + allow 0.0.0.0/0.0.0.0 #允许ip所有访问 + allow admin:monit # 访问用户名和密码 + +##4.配置监控进程 +``` +vi /etc/monitrc #编辑配置文件结尾配置监控目录 +include /etc/monit.d/* +mkdir /etc/monit.d/ #新建监控服务的目录 默认的 + +cd /etc/monit.d/ +vi nginx #编辑添加监控nginx 如果被关掉重新启动,添加一下代码 +check process nginx with pidfile /run/nginx.pid +start program = "/usr/local/nginx/sbin/nginx " with timeout 10 seconds +stop program = "/usr/local/nginx/sbin/nginx -s stop" +vi swoole #编辑添加监控swoole是否挂掉,如果挂掉重启 +check process swoole_server with MATCHING swoole_server +start program = "/usr/local/php/bin/php /App/www.banyar.cn/swoole/banyarWebServer.php" with timeo + +vi swoole #编辑添加监控swoole是否挂掉,如果挂掉重启 +check process swoole_server with MATCHING swoole_server +start program = "/usr/local/php/bin/php /App/www.banyar.cn/swoole/banyarWebServer.php" with timeout 10 seconds +``` \ No newline at end of file diff --git a/mvc.md b/mvc.md index 52cd6ea..d30e116 100644 --- a/mvc.md +++ b/mvc.md @@ -1,2 +1,55 @@ # MVC +>随着Web应用的商业逻辑包含逐渐复杂的公式分析计算、决策支持等,使客户机越来越不堪重负,因此将系统的商业分离出来。单独形成一部分,这样三层结构产生了。其中‘层’是逻辑上的划分。 + +三层体系结构是将整个系统划分为如图2.1所示的结构[3] +![图](http://dl.iteye.com/upload/attachment/576351/89359c3f-8370-3e2c-85d2-808961db8f82.jpg?_=2240725) + +(1)表现层(Presentation layer):包含表示代码、用户交互GUI、数据验证。该层用于向客户端用户提供GUI交互,它允许用户在显示系统中输入和编辑数据,同时系统提供数据验证功能。 +(2)业务逻辑层(Business layer):包含业务规则处理代码,即程序中与业务相关专业算法、业务政策等等。该层用于执行业务流程和制订数据的业务规则。业务逻辑层主要面向业务应用,为表示层提供业务服务。 +(3)数据持久层(Persistence layer):包含数据处理代码和数据存储代码。数据持久层主要包括数据存取服务,负责与数据库管理系统(如数据库)之间的通信。 +三个层次的每一层在处理程序上有各自明确的任务,在功能实现上有清晰的区分,各层与其余层分离,但各层之间存有通信接口。 +采用三层软件设计架构后,软件系统在可扩展性和可复用性方面得到极大提高,在资源分配策略设计合理运用的同时,软件的性能指标也得到提升,系统的安全性和易管东北理性也得到改善。三层体系结构对Web应用的软件架构产生很大影响,促进了基于组件的设计思想,产生了许多开发Web层次框架的实现技术。较之两级结构来说,三层结构修改和维护上 +更加方便。目前开发B/S结构的Web应用系统广泛采用这种三层体系结构。 + + +### 设计模式起源 +1994 年,由 Erich Gamma,Richard Helm,Ralph Johnson 和 John Vlissides(即所谓的“四人帮’,GoF:Gang of Four)合作的以《设计模式:可复用的面向对象软件的基本原理》为题目的书藉出版了。这本书解释了模式的用处,同时也使得设计模式得到广泛普及。在书中,他们四人记录了他们长期工作中发现的经典 23 个设计模式。 +IoC模式 +IoC 模式是 Apach Avalon 项目创始人之一 Stefano Mazzocchi 提出的一种代码调用模式,后被 MartinFowlcr 改名为 Dependency Injection(依赖注入),也就是将类和类,方法和方法之间的关系通过第三方(如配置文件)进行“注入”,不需要类或者方法自己去解决彼此间的调用关系。 IoC(Inversion of Control, 控制反转), 是一种用来解决组件(也可以是简单的 Java类)之间依赖关系、配置及生命周期的设计模式,它可以解决模块间的耦合问题。IoC模式它是把组件之间的依赖关系提取(反转)出来,由容器来具体配置。这样,各个组件之间就不存在代码关联,解决了调用方与被调用方之间的关系问题,任何组件都可以最大程度的得到重用。 + +IoC 模式实现的技术途径 +表 2.1 列举出了 IoC 的三种实现方式。本文中设计并实现的服务器端数据验证组件就是采用了第一种类型的 IoC 实现方式。 + + +### MVC模式 +MVC 是 Model-View-Control 的简称,即模型-视图-控制器。它是一个存在于服务器表达层的模型,它将应用分开,改变应用之间的高度耦合。 +MVC 是在 20 世纪 80 年代发明的一种软件设计模式,至今已被广泛使用,最近几年被推荐为 Sun 公司 J2EE 平台的设计模式。 + +MVC 模式结构 +MVC 模式将应用分为模型、视图和控制器三个部分: +1. 视图:数据的展现。 +视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。 +2. 模型:应用对象。 +模型是应用程序的主体部分。 模型代表了业务数据和业务逻辑; 当数据发生改变时,它要负责通知视图部分;一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。 +3. 控制器:逻辑处理、控制实体数据在视图上展示、调用模型处理业务请求。 +当 Web 用户单击 Web 页面中的提交按钮来发送 HTML 表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。 + +MVC 模式运行机制 +如图 2.2 所示为 MVC 模式运行机制: + +![图](http://dl.iteye.com/upload/attachment/576353/d3d769c0-5df9-3c31-9984-42f1fcbd00bb.jpg?_=2240725) + +在 MVC 模式中,Web 用户向服务器提交的所有请求都由控制器接管。接受到请求之后,控制器负责决定应该调用哪个模型来进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。 + +框架 +软件开发越来越倚重框架的使用。框架可以缩短应用软件系统的开发周期,提高软件生产效率和质量。大大简化了开发。选择何种框架、每个框架如何应用在在系统架构中是软件架构设计的重要环节。 +框架的定义 +在设计模式中,Gamma 等人为框架给出了一个明确定义:“框架(Framework)是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计”。 +框架是一组为相互协作的构件(Component)的集合,它能够处理一个或多个问题域(Domain)中的一系列问题。框架强调的是软件设计的重用性和系统的可扩充性。它是为了追求重用所带来的价值量最大化,而将被重用最多的部分封装成各个组件,辅以回调机制将它们纳入框架的控制范围之内。所以,框架提供了可在应用程序之间共享的可复用的公共结构。 + +框架的特性 +框架包含以下几个关键特性: +1.在应用方面,框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;在目标方面,框架是可被应用开发者定制的应用骨架。 +2.框架是一种软件,是应用程序的半成品。它可以供系统开发者选用,以完成系统的开发。 +3.框架解决的是某个特定范围即领域的问题。每个框架都有自己的目标领域,它并不能满足所有人的所有需求 diff --git a/oop/.md b/oop/.md new file mode 100644 index 0000000..e69de29 diff --git a/oop/oop.md b/oop/oop.md index 5e55cde..03fd905 100644 --- a/oop/oop.md +++ b/oop/oop.md @@ -1,2 +1 @@ - OOP是面向对象程序设计(Object Oriented Programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。 \ No newline at end of file diff --git a/php_lun_zi.md b/php_lun_zi.md index 56878d8..5cc4c77 100644 --- a/php_lun_zi.md +++ b/php_lun_zi.md @@ -18,10 +18,10 @@ overtrue/wechat 目前最好用的微信开发工具包 overtrue/package-builder Composer 包构建工具 [asonge/php-geohash](https://github.com/asonge/php-geohash) geohash的PHP版本 https://github.com/Seldaek/monolog #日志统计 同类还有seaslog​ -https://github.com/laravel/lumen​ #轻量级的api架构 -https://github.com/chrisboulton/php-resque #php redis实现的消息队列 ​ - - - +[轻量级的api架构​](https://github.com/laravel/lumen) +[php redis实现的消息队列](https://github.com/chrisboulton/php-resque) +[swoole 分布式全栈框架](https://github.com/tmtbe/SwooleDistributed) +[php-cp(php-connect-pool)是用php扩展写的一个数据库连接池。](https://github.com/swoole/php-cp) +[phpspider -- PHP蜘蛛爬虫框架](https://github.com/owner888/phpspider) diff --git a/shen_ru_li_jie_cao_zuo_xi_tong.md b/shen_ru_li_jie_cao_zuo_xi_tong.md index 9fc1bfb..0f4882a 100644 --- a/shen_ru_li_jie_cao_zuo_xi_tong.md +++ b/shen_ru_li_jie_cao_zuo_xi_tong.md @@ -1,2 +1,3 @@ # 深入理解操作系统 +[电子书](http://vdisk.weibo.com/s/myQ9E)