规划你的WebAPI – 安全


译自“Professional Web APIs with PHP: eBay,
Google, PayPal, Amazon, FedEx, Plus Web Feeds” (chapter 12)


你一定听过这样一句话“失败的计划是必定失败(Fail to plan, and you plan to fail.”对WebAPI来说,在开始一切工作之前的规划尤为重要,因为他不仅会影响到实现难度,同时会让那些使用API的开发者痛苦不堪。

Continue reading “规划你的WebAPI – 安全”

汉字整形从何说起?

这两天网络上轰轰烈烈要“汉字整容”,不过俺怎么只听到风,没看到任何“正规”一点的消息捏。可能是我消息不够灵通,不关注“国家大事”。怎么个改法?比如“茶”下面变成“木”。
这就是国家语委闲的蛋疼,估计怕被别人指责“不作为”吧。先不说成本有多大,多少人喜欢或者不喜欢。为什么大多数人都毫无概念?也许语委的领导们不想让大多数人费神,这“成本”太高了。“大家差不多就接受我们专家的建议吧”(这句话是我yy的)。可语言文字是专家的吗?要么你就要拿出样子来给所有人看看“整容”之后又多漂亮,要是比港姐都漂亮,也许会有人考虑考虑。
没事简化简化汉语拼音倒是有点用,汉字整容?现在不是时候。想让大家关注国学,想点有创意的办法,别整天玩这种弱智游戏。

汉字整形,别让民意寂寞

“多数人赞成汉字整形”,公众“被代表”了

SOA和ESB的关系

SOA定义了一种体系结构
参考
来自:理解SOA体系结构中ESB场景和解决方案
SOA 适用原则:

  • 利用显式的与实现无关的接口来定义服务 – 达到异构环境的交互
  • 利用强调位置透明性和可互操作性的通信协议
  • 封装可重用业务功能的服务的定义


为了实现 SOA,应用程序和基础架构都必须支持 SOA 原则。启用 SOA 应用程序涉及到创建服务接口,服务接口可以直接也可以间接地通过使用适配器用于现有的或新的功能。从最基本的级别来看,启用该基础架构涉及到规划功能来将服务请求路由和传递给正确的服务提供者。然而,基础架构支持在不影响服务的客户端的情况下由另一个 服务实现替代原有的服务实现也是至关重要的。这不仅需要根据 SOA 原则指定服务接口,而且需要基础架构允许客户端代码以独立于所涉及的服务位置和通信协议的方式来调用服务。这样的服务路由和替代是 ESB 的许多功能中的一部分。

ESB 有时被描述为分布式基础架构,这与其他的解决方案形成了对比,比如消息代理技术一般被描述为中心辐射型(hub-and-spoke)。然而,这并不是真正的差别。
Continue reading “SOA和ESB的关系”

[zt]SOAP风格中 RPC与Document的区别

大部分 Web 服务都是围绕着远程过程调用而构建的,而 WSDL 规范允许另外一种 Web 服务体系结构:文档样式(document style)。在该体系结构中,整个文档在服务客户端和服务器之间进行交换。
在 WSDL规范中隐含着一个非常巧妙的转换开关,它可以将 Web 服务的 SOAP 绑定从远程过程调用转换成 pass-through 文档。在 SOAP 协议绑定中的样式属性可以包含这两个值中的一个:rpc或document。当属性被设定为文档样式时,客户端知道应该使用XML模式而不是远程过程调用约定。本文将提供对这个 WSDL 转换开关的说明,描述它的好处,并将解释应该何时使用 pass-through 文档。
首先,让我们简要地谈谈 WSDL 的一些要点,来理解这个巧妙的转换是如何发生的。 WSDL 是一项 XML 规范,它被用来描述Web服务以及对于到达端点(服务)的协议相关的需求。WSDL 用抽象术语来描述服务;通过可扩展的绑定定义,它能够为使用具体术语调用服务定义协议和数据格式规范。下面的语法是直接从 WSDL 规范中摘录出来的,展示了在绑定中所包含的可扩展性元素:

<wsdl:definitions …. >
    <wsdl:binding name=”nmtoken” type=”qname”> *
        <– extensibility element (1) –> *
        <wsdl:operation name=”nmtoken”> *
           <– extensibility element (2) –> *
           <wsdl:input name=”nmtoken”? > ?
               <– extensibility element (3) –>
           </wsdl:input>
           <wsdl:output name=”nmtoken”? > ?
               <– extensibility element (4) –> *
           </wsdl:output>
           <wsdl:fault name=”nmtoken”> *
               <– extensibility element (5) –> *
           </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
</wsdl:definitions>
 
WSDL 规范通常描述三种绑定扩展HTTP GET/POST、MIME 以及 SOAP version 1.1。HTTP GET/POST 和 MIME 中定义的绑定扩展用来定义与标准的 Web 应用程序进行通信的需
求,这些应用程序可能返回(也可能不返回)XML 文档。在发送或返回 XML 文档时,HTTP GET/POST 绑定的扩展是隐式的文档样式。
SOAP 绑定扩展用来定义支持 SOAP 信封协议的服务。SOAP 信封是一种简单模式,它设计成能包含 XML 消息,提供特定于应用程序的消息头和消息体。SOAP 绑定的扩展使 WSDL 文档能够声明 SOAP 消息的需求,这样应用程序就能够与服务正确通信。SOAP 扩展允许将 SOAP 消息的样式声明为文档或 RPC。如果在soap:binding元素中声明了样式属性,那么该样式将成为所有没有显式声明的样式属性的soap:operation元素的缺省值。如果在soap:binding元素中没有声明样式属性,那么缺省的样式就是文档。下面是文档样式的显式声明:
Continue reading “[zt]SOAP风格中 RPC与Document的区别”

[zt]Mysql日期和时间函数不求人

对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。

这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:

mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) – TO_DAYS(date_col) <= 30;

DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql> select DAYOFWEEK(‘1998-02-03’);
-> 3

Continue reading “[zt]Mysql日期和时间函数不求人”

ORACLE 系统函数大全SQLSERVER系统函数的异同[转载]

下面是Oracle支持的字符函数和它们的Microsoft SQL Server等价函数。

函数 Oracle Microsoft SQL Server
把字符转换为ASCII :ASCII ASCII
字串连接: CONCAT ————–(expression + expression)
把ASCII转换为字符 CHR, CHAR
返回字符串中的开始字符(左起) INSTR ,—————CHARINDEX
把字符转换为小写 LOWER ———————LOWER
把字符转换为大写 UPPER——————– UPPER
填充字符串的左边 LPAD ——————–N/A
清除开始的空白 LTRIM——————–LTRIM
清除尾部的空白 RTRIM ——————–RTRIM
字符串中的起始模式(pattern) INSTR ——————–PATINDEX
多次重复字符串 RPAD ——————–REPLICATE
字符串的语音表示 SOUNDEX ——————–SOUNDEX
重复空格的字串 RPAD ——————–SPACE
从数字数据转换为字符数据 TO_CHAR ——————–STR
子串 SUBSTR ——————–SUBSTRING
替换字符 REPLACE ——————–STUFF
将字串中的每个词首字母大写 INITCAP ——————–N/A
翻译字符串 TRANSLATE ——————–N/A
字符串长度 LENGTH——————– DATELENGTH or LEN
列表中最大的字符串 GREATEST——————– N/A
列表中最小的字符串 LEAST ——————–N/A
如果为NULL则转换字串 NVL——————– ISNULL Continue reading “ORACLE 系统函数大全SQLSERVER系统函数的异同[转载]”

swing多线程编程归纳

Swing本身的界面绘制单线程的。也就是只有一个事件分派线程负责处理事件处理方法,保证了Swing本身的线程安全。但是如果存在一个很复杂耗时的任务,这样的处理方法就会造成界面的无响应甚至crash。所以Swing提供了SwingUtilities类的两个方法:invokeLater/invokeAndWait。
invokeLater:异步提交执行代码给事件派发线程,代码立即返回,不会等待代码执行完毕。
invokeAndWait:同步提交执行代码给事件派发线程,等到代码执行完再返回
(SWT中也有类似的机制对应的是:asyncExec和syncExec)

SwingWorker类用来实现后台线程操作,和上面的不同,SwingWorker在创建时会使用一个独立的线程(而不是在事件派发线程)执行相应的代码,然后可以通过get()方法获得执行结果。如果启动worker后马上要求结果的话,Swing同样会阻塞直到得到处理结果为止。

参考:
Swing单线程开发引起的问题
编写多线程Java应用程序常见问题
线程与Swing(英文)
SWT中处理多线程

对Java技术面试非常有用的几本书

Effective Java – 2002年的Jolt大奖,详细讲解了57个平时 不大会深入了解而又非常重要的知识点。作者Joshua Bloch还有一本类似的书 – Java Puzzlers
Effective Enterprise Java – Effective Java的姊妹篇,专注于企业级Java应用的各种蹊跷和最佳实践。
Bitter Java – 从负面学习,在教训和犯错中成长。作者列举了大量的反模式来挑战我们那些被动接受的先入为主。
高质量Java程序设计:2003年的一本书,作者是几个国内的程序员。模仿Effective Java的组织形式,通过35个条款,讲解了一些在实际工作中经常会忽视的问题。
SCEA study guide – 考试用书,如果可能遇到面试=笔试的情况,当然还可以把其他的study guide都拿出来看看。
各种specification,直接到JCP找相应的JSR:

针对特定的工具和领域:推荐 in action 系列,比如hibernate in action, spring in action, lucene in action …