文档章节

无味杂谈

ShualLiu
 ShualLiu
发布于 2017/03/19 00:17
字数 2315
阅读 54
收藏 0

    距离上一次写博客过去了好久,今年伊始带人做项目(我也菜。。),发生了很多很多事,难得偷偷请假放松一天。

    感悟分三点:对REST的理解,对项目的理解以及对管理的理解。

    (1)对REST的理解。

        第一次听说REST是在去年秋天。准确的说,当时项目要求是用Web Service实现一个文件自动传输功能。这个功能很好说,简单的描述就是一个‘数据库+存储文件的文件夹+一个类似于windows服务的服务’。讲真,我找相关资料找了好多,还是没有理解Web Service。此时大佬说准备采用Apache Axis2,那就研究一下咯,一段时间后对它的初步印象就是一个RPC,然而由于功课原因我也没有深入研究Axis2(不是借口。。。)。

        上一学期过得很快,奔波着考试吧唧吧唧的,就完了。在考完试后,仔细研究了一下RPC,大概知道了它的运作方式。

        RPC与XML可谓是天作之合。XML可以完整的描述一个信息,RPC通过XML,把需要调用的服务器的方法和请求的数据全部封装到XML里面,举个例子。

<xml>

<method>getSinglePerson</method>

<argument>personStaffId</argument>

<require>personUserName</require>

</xml>

        当然这个例子是随便写的,只是想解释以下XML可以清晰的说明想要进行什么操作。这也体现了XML比JSON可读性好太多。据悉很多企业应用还是使用RPC传输方式了,不过前景嘛,当然是下来会出场的REST。

        REST,这里我就不粘贴那么多概念了。菲尔丁博士的论文,看的似懂非懂。简单的来讲,REST中文译名为表述性状态转移(脑中出现了状态机。。),其实我感觉,只要理解了HTTP,就能理解博士所说的HTTP,毕竟博士参与了HTTP规范。

废话好多,以下正经起来。

        HTTP中,最精华的规范为“把一切当作资源”。我们用浏览器浏览页面,页面是一个资源,而类似于天气预报的数据也是资源,只不过因为页面被浏览器解释了,呈现给我们的是视图,而单调的数据没有视图。

这就让我们加深了对HTTP的认识,以前我认为HTTP是为浏览器服务的,即HTTP是浏览器与远端服务器进行通信的协议,而HTTP,其实也是一个动词,即传输资源的动作。就如上面段首所言,一切都是资源,HTTP把资源传送到本地。还有,HTTP使用很广泛,而且这么多年没出现什么大问题,也证明当初的设计是非常正确的。

        理解了‘把一切当成资源’以及‘HTTP是动词’,然后就来讲述为什么REST很符合未来的趋势。今天中午看了一篇文章叫做“谷歌发布云端API规范”,打算用REST来替换RPC,虽然还需要假以时日,但是趋势已经显现出来了。为什么REST好呢,举个例子,就比如最近在搞的一个重构项目,把原本用传统Struts2+Hibernate实现的项目重构为RESTful的,为什么要重构?比如,我们计划在其中开发一个Android APP,可是按照以前的方式,需要专门开发一套与Android通信的系统。这样浪费时间和精力,并且以后维护的时候需要同时维护Web通信系统和Android通信系统,想想就麻烦。。。企业是在合法的情况下追求利润最大化的,在以后升级之时肯定需要彻底重构减少成本。

        还没有讲到REST的好处,REST的缩影就是HTTP。把一切当作资源,把一切作成服务。我理解服务为24小时不间断的函数,给你一个输入,返回一个输出。而且这个服务,是无状态的。为什么要做成无状态的,众所周知,HTTP也是无状态的,只是传输,不在乎你的状态,并且底层是TCP/IP协议。无状态很好的把前端后端解耦。举个例子,最近在设计RESTful API,可是我一直想不通前端怎么接受呢,,,如果要按照MVC的思想,,,终于有一天,幡然醒悟,本来考虑的就有问题,我是要把它设计成无状态的,那我为什么考虑前端的问题呢,这样设计的API就不是REST风格了!然后又想,如果按照MVC方式,相当于客户端把会话状态(我理解之为前端和控制器耦合,,不知道对不对啊,,,大神请指教)传输过来,这样我就考虑几个问题了,这样也不属于REST了,所以都错了!!!

        又扯了一段,我们假如把所有数据设计成资源,就像HTTP一样,那么我们不就用一套通信方案就可以了?例如需要得到库存信息,API为getStocks(),APP可以调用此方法,PC可以调用此方法,这不就缩减好多成本了嘛?我们只需要告诉其他开发人员我这个格式就可以了阿。

        理解了统一接口,然后就是理解URI。就像HTTP一样,资源都有一个地址,例如localhost/index,在这个地址背后就是一个资源。我们把REST设计成一个个的API,是不是也可以通过资源定位符来定位资源呢?当然可以啦,我们也可以用URI来标示资源阿?(URL是URI的子集)其实这点不严谨,动作+资源才能唯一定位资源,为什么?对资源的操作无非几种而已,GET,POST,DELETE,PUT,还有OPTIONS询问操作方式。

 

/*********************************************/

今日更新

        说到这里,可以引伸出REST的真实用途了。把一切当成小小的服务(暂时没有研究过微服务,所以叫小服务)。REST的真实含义是提供统一的访问接口,无论客户端还是手机端,统一访问这个接口得到相关的数据(我目前将数据例如list或者object全部格式化成JSON),客户端只用解析相关JSON,然后就知道你请求得到的东西了。为什么不用XML?XML太大了,可读性好但是传输效率太低。

        REST这种风格是为了什么呢?是为了访问的便利而已,你的业务逻辑还是那样的逻辑,只不过对其他人暴露的接口得到的都是JSON等等,统一了风格。例如你进行查询操作,后台依然是“查询数据库+返回结果”,唯一的区别就是可能像我一样用FastJson将其格式化为JSONString,然后传输给对方。当然,资源的访问方式也不太一样,一般使用URI来标记资源的位置。

        我感觉这些东西就是REST的思想子集,,,目前开发遇到了一些例如资源设计的问题,例如数据库表与资源之间有些耦合,资源设计没有很明确很易懂。项目计划月底完工,完工之后给大家分享最后怎么设计的。

 

/////////////////////////////////////////

关于对项目的理解

        软件工程最大的风险在于无法真正控制其风险,当我们认识到风险的时候,基本快晚了。。。---Shual Liu

        本人经历过软件的腐烂,深有体会。鄙人也开始感觉写代码只是很小一方面,如何保持团队协作,如何保持软件规范,以及如何设计可复用的软件,各个都是学问。

        在现在文明中,很少能见到一人独立完成一个项目了。集体的力量更大,我时时在想,我不能认为自己觉得他们进度太慢就全盘包办代替了,这是不对的,更好地方法是让他们每个人多产出20%,这样自己可以把更多的时间花到设计上,以免后来会出现架构级缺陷时为时已晚。

        在现今这个小团对中,产出效率很低,大部分人没有学习过集合,设计模式等东西。隐隐约约感觉很棘手,因为很担心代码质量不达标,可是事已至此,又该怎么办呢?还记得很有印象的一句话,软件永远不是完美的,只能一步步让它完美。其实在有限的时间内做出来一个基本称心如意的,已经很符合我的期望了。

        其实说到底就是规范的问题。就算他很差,有了规范,也能一步一步写出差不多的代码。鄙人前几天详细讲述了以下命名格式,包管理,源码注释,源码头文件注释等等,在规范之中进行(目前没看到效果呢。。。)

 

   //未完待续

© 著作权归作者所有

ShualLiu
粉丝 2
博文 32
码字总数 13848
作品 0
成都
程序员
私信 提问
软件开发杂谈 001

1. 软件架构设计可以基于数据库的模型设计也可以基于领域模型设计。对于业务系统来说,如果他的核心是数据处理和分析,而且数据量很大可以在架构设计时采用基于数据库建模的方式,对于一些中...

青夜之衫
2017/12/05
0
0
杂谈nginx 301 重定向在非常规破解中的利用

杂谈nginx 301 重定向在非常规破解中的利用 火星信息安全研究院2017-12-281 阅读 Python 在某些特定的情况下,如果软件采用本地加服务器校验的方式进行注册时候。单纯的本地破解可能很快就是...

火星信息安全研究院
2017/12/28
0
0
好书推荐.Philosophy.>

图书封面: 书籍简介: 主要讲述了作者在该作品中倾注了其对中国民众的关注,以反讽和幽默的手法直面生活,从一个轻松的角度来解析身边复杂的事态. 书籍目录: 第 001 章 沉默的大多数 第 002 章 ...

满满李
2016/05/07
162
0
我的友情链接

51CTO博客开发 王春海的博客 桌面虚拟化杂谈 ZJS的微软桌面虚拟化 让"云"无处不在 欢迎光临ciywind博客 snowyan welcome! 海狗哥的流媒体空间 叔宝(孙亮) 下里巴人的家...

abchw
2017/11/22
0
0
【目录】姜晔的技术空间目录

逆向工程系列 逆向工程第001篇:解锁FIFA07传奇模式 逆向工程第002篇:打造自己的仙剑奇侠 逆向工程第003篇:跨越CM4验证机制的鸿沟(上) 逆向工程第004篇:跨越CM4验证机制的鸿沟(中) 逆...

ioio_jy
2014/09/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
7分钟前
0
0
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
6
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部