ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品国产成人,亚洲综合日本,日韩一中文字幕http://www.aygfsteel.com/alex/category/19422.html不求多得,只求一å¾? about java,hibernate,spring,design,database,Ror,ruby,快速开å?lt;br/><br/> 最˜q‘关心的内容关键å­?RoR zh-cnMon, 04 Jun 2007 00:06:07 GMTMon, 04 Jun 2007 00:06:07 GMT60rails 安装与升¾U?/title><link>http://www.aygfsteel.com/alex/archive/2007/06/04/121709.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Sun, 03 Jun 2007 16:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/alex/archive/2007/06/04/121709.html</guid><wfw:comment>http://www.aygfsteel.com/alex/comments/121709.html</wfw:comment><comments>http://www.aygfsteel.com/alex/archive/2007/06/04/121709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/alex/comments/commentRss/121709.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/alex/services/trackbacks/121709.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.aygfsteel.com/alex/archive/2007/06/04/121709.html'>阅读全文</a><img src ="http://www.aygfsteel.com/alex/aggbug/121709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/alex/" target="_blank">Alex</a> 2007-06-04 00:18 <a href="http://www.aygfsteel.com/alex/archive/2007/06/04/121709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>行万里èµ\åQŒè¯»ä¸‡å·ä¹?/title><link>http://www.aygfsteel.com/alex/archive/2007/05/29/120644.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Tue, 29 May 2007 03:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/alex/archive/2007/05/29/120644.html</guid><wfw:comment>http://www.aygfsteel.com/alex/comments/120644.html</wfw:comment><comments>http://www.aygfsteel.com/alex/archive/2007/05/29/120644.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.aygfsteel.com/alex/comments/commentRss/120644.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/alex/services/trackbacks/120644.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.aygfsteel.com/alex/archive/2007/05/29/120644.html'>阅读全文</a><img src ="http://www.aygfsteel.com/alex/aggbug/120644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/alex/" target="_blank">Alex</a> 2007-05-29 11:32 <a href="http://www.aygfsteel.com/alex/archive/2007/05/29/120644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ä»?lt;应用Rails˜q›è¡Œæ•æ·Webå¼€å?gt;看设计过½E?/title><link>http://www.aygfsteel.com/alex/archive/2007/05/24/119566.html</link><dc:creator>Alex</dc:creator><author>Alex</author><pubDate>Thu, 24 May 2007 01:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/alex/archive/2007/05/24/119566.html</guid><wfw:comment>http://www.aygfsteel.com/alex/comments/119566.html</wfw:comment><comments>http://www.aygfsteel.com/alex/archive/2007/05/24/119566.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/alex/comments/commentRss/119566.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/alex/services/trackbacks/119566.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.aygfsteel.com/alex/archive/2007/05/24/119566.html'>阅读全文</a><img src ="http://www.aygfsteel.com/alex/aggbug/119566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/alex/" target="_blank">Alex</a> 2007-05-24 09:52 <a href="http://www.aygfsteel.com/alex/archive/2007/05/24/119566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt]学习 RESThttp://www.aygfsteel.com/alex/archive/2007/01/23/95440.htmlAlexAlexTue, 23 Jan 2007 00:30:00 GMThttp://www.aygfsteel.com/alex/archive/2007/01/23/95440.htmlhttp://www.aygfsteel.com/alex/comments/95440.htmlhttp://www.aygfsteel.com/alex/archive/2007/01/23/95440.html#Feedback0http://www.aygfsteel.com/alex/comments/commentRss/95440.htmlhttp://www.aygfsteel.com/alex/services/trackbacks/95440.htmlkey words: REST webservice

转自廖宇é›ïLš„Weblog

REST 是由 Roy Fielding 在他的论�a >《Architectural Styles and the Design of Network-based Software Architectures�/a>中提出的一个术语�/p>

REST 是英æ–?Representational State Transfer çš„ç¾ƒå†™ï¼Œæœ‰ä¸­æ–‡ç¿»è¯‘äØ“â€œå…·è±¡çŠ¶æ€ä¼ è¾“â€ï¼ˆå‚è€ƒï¼šã€ŠSIP/IMS¾|‘络中的Representational State Transfer (REST)和数据分布ã€?/a>åQ‰ã€?/p>

————————————�/p>

前面的内å®Òޝ”较枯燥,我说说我自己的理解ã€?/p>

但是 REST 到底是什么呢åQŸè®ºæ–‡æˆ‘看不懂,不过扑ֈ°ä¸€½‹‡æ›´½Ž€å•易懂的东西åQ?a >《Building Web Services the REST Wayã€?/a>ã€?/p>

æ ÒŽ®˜q™ç¯‡æ–‡ç« åQŒæˆ‘整理了一下我自己å¯?REST 的理解:

REST 首先只是一¿Uæž¶æž„样式,不是一¿Uæ ‡å‡?/strong>。这点和 Ajax ¾cÖM¼¼åQŒä¸¤è€…都是利用现有的成熟技术ã€?/p>

åœ?REST 的定义中åQŒä¸€ä¸?Web 应用æ€ÀL˜¯ä½¿ç”¨å›ºå®šçš?URI 向外部世界呈玎ͼˆæˆ–者说暴露åQ‰ä¸€ä¸ªèµ„æº?/strong>ã€?/p>

URI 是英æ–?Uniform Resource Identifier 的羃写,中文¾˜»è¯‘“通用资源标志½W¦â€ã€?/p>

“通用资源标志½W¦â€æ˜¯æŒ?strong>唯一标识一个资源(xhtml æ–‡äšg、图片、css 样式表)的字½W¦ä¸²ã€‚当然了åQŒRFC 中定义的 URI 复杂得多åQŒä¸˜q‡æˆ‘们此处将 URI 惌™±¡æˆä¸€ä¸ªähçš„èín份证åïL ž®Þp¡Œäº†ï¼ˆä½ ä¸èƒ½æœ‰ä¸¤ä¸ªåŒæ—¶æœ‰æ•ˆçš„èín份证åïL åQŒä¸€ä¸ªå·ç ä¹Ÿä¸å¯èƒ½åŒæ—¶å¯¹åº”两个ähåQ‰ã€‚而我们天天挂在嘴边的 URL 地址ž®±æ˜¯ URI 的一¿Uè¡¨çްåŞ式(个äh理解åQŒæœ‰é”™è¯·¾U æ­£åQ‰ã€?

知道什么是 URI 后,我们来看一个实际例子:

http://www.example.com/photo/logo 指向 example.com ¾|‘ç«™åQˆå¯ä»¥è§†ä¸ÞZ¸€ä¸?Web 应用åQ‰ä¸­¾cÕdž‹ä¸?photoåQŒåå­—䨓 logo 的资源。我们用‹¹è§ˆå™¨è®¿é—®è¿™ä¸?URIåQŒçœ‹åˆ°çš„ž®†å¯èƒ½æ˜¯ä¸€ä¸?xhtml 文档åQŒå…¶ä¸­ç”¨ <img src=”……â€?/> 来显½Cºå®žé™…的照片ã€?/p>

http://www.example.com/photo/logo 很容易让你想åˆ?URL 重写。事实上åQŒè¿™ä¸ªåœ°å€å¾ˆå¯èƒ½ä¼šåœ¨æœåŠ¡å™¨å†…éƒ¨å¤„ç†ä¸?http://www.example.com/photo.php?name=logo ˜q™æ ·çš„地址。photo.php 是服务器端的一个动态脚本文ä»Óž¼Œæ ÒŽ® name 参数生成 xhtml 文档˜q”回¾l™æµè§ˆå™¨ã€?/p>

现在假设我们要获取这张照片的 XML 文档。XML 文档中包含照片的文äšg名、文件大ž®ã€æ‹æ‘„日期等½{‰ä¿¡æ¯ã€‚也ž®±æ˜¯è¯´æˆ‘们要获取“同一个资源的不同表现形式的数据â€?/strong>。对于这个要求,我们可以很容易的用另一ä¸?URL 地址辑ֈ°åQšhttp://www.example.com/xml/logoã€?/p>

但是åQŒè¿™ž®Þp¿èƒŒäº†â€œURI 唯一标识一个资源â€?/strong>的定义。如果我们要获取同一个资源的多种表现形式åQŒé‚£ä¹ˆå°±è¦ä‹É用更多的 URLåQŒä»Žè€Œç»™ä¸€ä¸ªèµ„源指定了多个不同çš?URIã€?/p>

而在 REST 中,不管是获取照片的 xhtml 文档˜q˜æ˜¯ XML 文档åQŒæˆ–者照片文件本íw«ï¼Œéƒ½æ˜¯ç”¨åŒä¸€ä¸?URIåQŒå°±æ˜?http://www.example.com/photo/logoã€?/p>

那这是怎么办到的呢åQŸRuby On Rails 中是通过分èöL HTTP Request Header 信息来分辨客æˆïL«¯æ˜¯æƒ³è¦å–得资源的哪一¿Uè¡¨çްåŞ式的数据ã€?/p>

当我们用‹¹è§ˆå™¨è®¿é—®ä¸€ä¸ªç½‘址æ—Óž¼Œ‹¹è§ˆå™¨ä¼šæž„造一ä¸?HTTP è¯äh±‚。这个请求有一个头信息åQŒå…¶ä¸­åŒ…括了本次è¯äh±‚接受何种¾cÕdž‹çš„æ•°æ®ã€‚通常‹¹è§ˆå™¨å‘送的 HTTP è¯äh±‚头中åQŒAccept 的值都æ˜?*/*åQŒä¹Ÿž®Þp¯´æŽ¥å—服务器返回的ä»ÖM½•¾cÕdž‹çš„æ•°æ®ã€?/p>

看到˜q™é‡ŒåQŒèªæ˜Žçš„家伙应该知道了。只要我们指定一个特定的 Accept 参数åQŒé‚£ä¹ˆæœåС噍ž®±å¯ä»¥é€šè¿‡åˆ¤æ–­è¯¥å‚数来军_®š˜q”回什么类型的数据。所以在一个采ç”?REST 架构的应用中åQŒè¦èŽ·å–åŒä¸€ä¸ªèµ„æºçš„ä¸åŒè¡¨çŽ°å½¢å¼çš„æ•°æ®ï¼Œåªéœ€è¦ä‹É用不同的 HTTP è¯äh±‚头信息就行了ã€?/p>

如果考虑ä¸?Web 应用增加 Web ServicesåQŒè¿™¿UæŠ€æœ¯çš„价值就体现出来了。比如我写了一ä¸?Delphi ½E‹åºåQŒçŽ°åœ¨åªéœ€è¦æž„é€ ä¸€ä¸ªåŒ…å?Accept: text/xml çš?HTTP è¯äh±‚å¤ß_¼Œç„¶åŽž®†è¯·æ±‚发送到 http://www.example.com/photo/logo ž®±å¯ä»¥äº†ã€‚返回的¾l“æžœž®±æ˜¯ä¸€ä¸?XML 文档åQŒè€Œä¸æ˜?xhtml 文档ã€?/p>

å› äØ“æˆ‘ä»¬çš?HTTP è¯äh±‚头信息有不同的状态,从而可以获得不同的数据åQŒæ‰€ä»¥å«åšâ€œå…·è±¡çŠ¶æ€ä¼ è¾“â€?:)

————————————�/p>

除了上面的用法,REST ˜q˜æœ‰˜q›ä¸€æ­¥çš„æ‰©å±•ã€?/p>

我们åœ?Web 应用中处理来自客æˆïL«¯çš„请求时åQŒé€šå¸¸åªè€ƒè™‘ GET å’?POST ˜q™ä¸¤¿U?HTTP è¯äh±‚æ–ÒŽ³•。实际上åQŒHTTP ˜q˜æœ‰ HEAD、PUT、DELETE ½{‰è¯·æ±‚方法。而在 REST 架构中,用不同的 HTTP è¯äh±‚æ–ÒŽ³•来处理对资源çš?CRUDåQˆåˆ›å»ºã€è¯»å–、更新和删除åQ‰æ“ä½œï¼š

  • POST: 创徏
  • GET: è¯Õd–
  • PUT: æ›´æ–°
  • DELETE: 删除

¾lè¿‡˜q™æ ·çš„一番扩展,我们对一个资源的 CRUD 操作ž®±å¯ä»¥é€šè¿‡åŒä¸€ä¸?URI 完成了:

http://www.example.com/photo/logoåQˆè¯»å–)
仍然保持�[GET] http://www.example.com/photo/logo

http://www.example.com/photo/logo/createåQˆåˆ›å»ºï¼‰
æ”¹äØ“ [POST] http://www.example.com/photo/logo

http://www.example.com/photo/logo/updateåQˆæ›´æ–ŽÍ¼‰
æ”¹äØ“ [PUT] http://www.example.com/photo/logo

http://www.example.com/photo/logo/deleteåQˆåˆ é™¤ï¼‰
æ”¹äØ“ [DELETE] http://www.example.com/photo/logo

从而进一步规范了资源标识的ä‹É用ã€?/p>

通过 REST æž¶æž„åQŒWeb 应用½E‹åºå¯ä»¥ç”¨ä¸€è‡´çš„æŽ¥å£åQˆURIåQ‰æš´éœ²èµ„源给外部世界åQŒåÆˆæä¾›å¯¹èµ„æºçš„æ“ä½œæœåŠ¡ã€‚è¿™å¯¹äºŽä»¥èµ„æºäØ“ä¸­å¿ƒçš?Web 应用来说非常重要。例如照片共享网站、用æˆïL¤¾åŒºç­‰ã€?/p>

————————————�/p>

Ruby On Rails 1.2 版对 REST 有很好的支持åQŒä½†è¦åœ¨ PHP 中应ç”?REST ˜q˜éœ€è¦è§£å†³ä¸ž®‘问题:

  • 如何在服务端判断 PUT、DELETE è¯äh±‚æ–ÒŽ³•åQ?
  • 如何获取ç”?PUT、DELETE è¯äh±‚æ–ÒŽ³•中传递的数据åQ?
  • 如何获取 HTTP è¯äh±‚头信息中çš?Accept 参数å€û|¼›
  • 如何在浏览器端发èµ?PUT å’?DELETE è¯äh±‚ã€?

不过我仔¾l†çœ‹äº?PHP 文档åQŒæˆ‘觉得上面几个问题都是可以解决的ã€?/p>

服务端综合ä‹Éç”?$_SERVER[’HTTP_ACCEPT’]ã€?_SERVER[’REQUEST_URI’]ã€?_SERVER[’REQUEST_METHOD’]ã€?_SERVER[’QUERY_STRING’] ˜q™äº›å˜é‡åº”该可以搞定前面三个问题。而第四个问题则可以用 JavaScript çš?XMLHttpRequest 对象来实现ã€?/p>

不过我想 REST 的真正ä­h值在äº?Web ServicesåQŒè€Œä¸æ˜¯é€šè¿‡‹¹è§ˆå™¨æ“ä½œçš„应用½E‹åºã€?/p>

————————————�/p>

参考:



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÌïÁÖÏØ| äÃÖÝÊÐ| ̨½­ÏØ| ÄþÁêÏØ| ÁúÉ½ÏØ| ÆÁÉ½ÏØ| ½ðÑôÏØ| ¼ª°²ÊÐ| »á¶«ÏØ| Èð½ðÊÐ| ÈðÀöÊÐ| ºôÂ×±´¶ûÊÐ| ÆÎÌïÊÐ| ¾üÊÂ| ¶«º£ÏØ| ¹âÉ½ÏØ| Àײ¨ÏØ| ÈÊÊÙÏØ| ÎÄÉ½ÏØ| ³Ç¹ÌÏØ| ÃÖ¶ÉÏØ| ÅîÏªÏØ| ƽ½­ÏØ| ÀÖÁêÊÐ| Ôý´ïÏØ| ¾¸±ßÏØ| ÁÙå¢ÏØ| »ÆÆÖÇø| ÁÖ¿ÚÏØ| ¸ßÓÊÊÐ| ´óÆÒÇø| ÄÏÀÖÏØ| Õò°ÍÏØ| ÐÞË®ÏØ| ¶«¹âÏØ| Äϰ²ÊÐ| Ò˶¼ÊÐ| º×ÇìÏØ| ¾²º£ÏØ| ¼½ÖÝÊÐ| »ÆÆÖÇø|