REST设计的8大误区

当第一次设计REST系统的时候,人们很容易犯下各种错误。本文对这些错误做个汇总,这样你就可以在设计过程中避免他们。如果有任何不清楚的地方可以在rest讨论版区提问。
  1. 没有充分的利用HTTP特性。你可以在在web service 中使用HTTP实现和和SOAP或者XML-RPC等类似的逻辑,而不是采用标准的SOAP或者XML-RPC。如果你打算用错误的方式使用HTTP,那还不如使用标准方式进行!大多数类似这种问题的讨论都是因为人们滥用了HTTP。
  2. 不要过度使用POST。POST在某些场合相对其他HTTP请求看起来“更加灵活”。相对于其他的HTTP方法POST的定义相对灵活,并且他支持同步收发信息。因此很多人认为采用POST可以解决所有问题。在你的第一个REST WEB Service,我建议你只有在创建一个新的URI资源的时候才使用POST。设想下POST仅仅意味着“在当前的URI里创建一个新的URI”。有的情形下,你有可能在对于资源的某个操作是否需要使用POST的时候犯迷糊。据过往的设计经验,请仔细想想是不是用其他的HTTP请求就不能解决问题,如:GET, DELETE或者PUT,另外是否可以分拆到一套组合的方法里。
  3. 不要依赖URI内在的结构定义语义。有些人认为REST设计是由一对URI资源组成的。“我把采购订单放入/purchases,给所有的订单一个编号,像/purchases/12132,客户记录将在/customers...“ 当你在设计阶段,通过电子白板和即时通讯沟通的时候,这是一个好的沟通方式,但是这不是最终的服务接口定义。根据web设计的原则,大部分URI在大部分时候对于客户端软件是不透明的。换句话说,你公布的API不可以依赖URI的结构定义语义。你需要定义个一个单独的XML文件列出服务中的所有组件。这些组件将有超链接指向别的组件。这样你就可以通过一个URI向人们展示你整个SERVICE,另外你还可以根据需要跨越服务器和域分发你的组件。我的经验是客户只有在使用查询字符串时才需要构造URI。这些查询字符串通过URI返回相对应的对象。
  4. 不要在URI里定义动作。这个原则是由上一条自然产生的。有一种对URI的滥用有着特别恶劣的危害,如,构造一条这样的查询字符串“someuri?action=delete”。首先,采用GET来做一个这样的动作是不安全的。其次,在"action URI" 和 "object" URI之间没有一个正式的关系。最后你的“action=” 协定变成了你的程序特有的东西。然而REST做的却是尽可能的使诸多的“程序协定”超越协议。
  5. 服务是不常用的资源。在REST设计里,一个“常备引用服务”并不是很有趣。在一个REST设计中,你需要有一批常备的资源,一个服务只是对这些资源的引用而已。
  6. 会话和REST是无关的(REST是无状态的--这样是不是更合适)。一个客户端没必要去去调用类似“login”或者“start a connection”这样的指令。HTTP本身就有完善的验证机制自动的检测每条信息是否验证通过。客户端程序只是来访问资源,不是服务本身。因此完全没有登录的必要!打个比方说你通过REST服务预定了一个航班。你并没有在创建一个新的会话连接到服务。相当于你请求“流程创建对象”帮你创建一个新的路程。你可以开始填写资料,然后在网络上的其他组件填写另外的资料。这里并没有会话,因此并没有在不同客户端迁移会话的问题。同样也没有类似的会话相关的问题出现在服务器(虽然它们是在集群上运行的)。
  7. 不要采用专有的对象标识。如果采用URI。URI是非常重要的,因为你可能在两天内对于同样的URI关联上不同的信息。为了能够简单的发布数据到web服务器,因此需要将发布数据和获取数据的URI分离。注意这个技巧只能用在可以分离的URI(HTTP URI)类型中,因此URN 或 UUID-based URIs比起HTTP URI并不是很合适。另外也可以使用RDF和其他类似的技巧,它们允许在URI中加入元数据,但是这些就不再受你控制了。如果你采用UUID或者其他类似的方式解析URI,就意味着你得到了URI的一般好处。你得到了标准的解析方式但是没有标准的分离资源的能力。如果你使用一个HTTP URI 那么你将获得另外一半好处,因为你可以通过标准的方式分离资源。
  8. 不要担心协议的独立性。针对适当的资源操作的语义只存在一个协议。如果将来发展出来了另外一个,只需要简单的保留相同设计,仅仅支持替换的协议接口而已。另外一个方面,人们通常所说的“协议独立”是放弃资源模型,因此也等于放弃了REST和WEB。

总体来说,始终需要牢记的是,REST关于如何通过URI展示资源的方案,不是一个通过消息结构提供的服务。


译自:

Common REST Mistakes

by Paul Prescod
http://www.prescod.net/rest/mistakes/


第一次翻译文章,不当之处欢迎指正。

另外文中的很多见解我也有理解模糊的地方,有问题请参考英文原版。


汉字字库存储芯片扩展实验 # 汉字字库存储芯片扩展实验 ## 实验目的 1. 了解汉字字库的存储原理和结构 2. 掌握存储芯片扩展技术 3. 学习如何通过硬件扩展实现容量汉字字库存储 ## 实验原理 ### 汉字字库存储基础 - 汉字通常采用点阵方式存储(如16×16、24×24、32×32点阵) - 每个汉字需要占用32字节(16×16)到128字节(32×32)等的存储空间 - 国标GB2312-80包含6763个汉字,需要较存储容量 ### 存储芯片扩展方法 1. **位扩展**:增加数据总线宽度 2. **字扩展**:增加存储单元数量 3. **混合扩展**:同时进行位扩展和字扩展 ## 实验设备 - 单片机开发板(如STC89C52) - 存储芯片(如27C256、29C040等) - 逻辑门电路芯片(如74HC138、74HC373等) - 示波器、万用表等测试设备 - 连接线若干 ## 实验步骤 ### 1. 单芯片汉字存储实验 1. 连接27C256 EPROM芯片到单片机系统 2. 将16×16点阵汉字字库写入芯片 3. 编写程序读取并显示汉字 ### 2. 存储芯片字扩展实验 1. 使用地址译码器(如74HC138)扩展多片27C256 2. 将完整GB2312字库分布到各芯片中 3. 编写程序实现跨芯片汉字读取 ### 3. 存储芯片位扩展实验 1. 连接两片27C256实现16位数据总线扩展 2. 优化字库存储结构,提高读取速度 3. 测试并比较扩展前后的性能差异 ## 实验代码示例(单片机部分) ```c #include <reg52.h> #include <intrins.h> // 定义存储芯片控制引脚 sbit CE = P2^7; // 片选 sbit OE = P2^6; // 输出使能 sbit
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值