posts - 38, comments - 2, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          http://fm.mp3.baidu.com/

          本文是使用 B3log SoloSolo 示例 進行同步發布的。

          posted @ 2010-10-30 19:52 squirrel 閱讀(192) | 評論 (0)編輯 收藏

          前一陣收到一封網友的來信,信中提到了他在提高個人收入和未來發展中的一些困惑,這也是我們許多學員和網友經常找我咨詢的一件事情,頗具普遍性,故寫此博與大家探討和分享一下。

                 原信內容如下:

          -------------------------
          張老師,你好!
          我今年23歲,明年12月軟件工程碩士畢業,學Java一直都是深受張老師的感染,是跟著張老師走進IT這個行業,現在又對這行有一定的疑惑,希望老師能夠給予解答!
                 為什么JavaEE搞太久之后,會覺得Java搞起來沒意思了,想去搞 Linux C了呢? 我在一家中國最大BSS/OSS的電信運營商工作兩年了,工資在xx(二線城市)這個地方還算可以(一年可能8萬-9萬左右),但是最近一直覺得很失落, 覺得搞JavaEE甚至搞java都覺得沒好大意思了,有點想轉行去搞Linux c這些東西去了,因為在xxxx這個地方大公司(比如:Moto,諾西,阿爾卡特,愛立信等)都很少招搞Java的人,而且一般招搞Java的人,工資都 給得不是特別的高,去小公司我覺得沒有好多意思(大部分都給不了好多錢),所以一直很迷茫!
          我 想在碩士畢業之后,薪資待遇方面能夠更上一層樓,我覺得人生有三個境界:一是滿足物質生活需要,二是有自己的事業 ,三是做一定奉獻(不求回報)。我現在還處于人生的第一個階段,最近張老師一直在說Android很火,但是我在成都的招聘網站上搜索了一下,職位還是相 當的少! 我真的有點迷茫了,是繼續搞Java還是轉行去做C/C++,請張老師給點意見吧!謝謝!
          禮!
          ---------------------------
              我回復的郵件如下:
          ----------------------------------

          你好!

                  我實在實在是太忙了,連給你回信的時間都很難抽出來,但你的來信我一直都掛在心上。眼看一個多月過去了,這封回信我也實在拖得太久了,今天索性先把別的事情擱置一下來處理你的來信,但也只能對你簡單回復一下了。
                 對程序員來說,要想賺大錢,賺月薪超過12k、甚至更多的錢,不是學什么技術,搞什么技術的工作能解決的!單說打工,你現在的薪水已經夠可以的了,想單純 地通過學習其他技術來提高薪水,是不會有多大的收獲的,還不如靠現有的技術混年頭,月薪也能自然增長到5位數。

                 要想大幅度地提升薪水,靠的是技術之外的許多其他因素,我簡單列舉一二:

                (1)找到一個未來有發展潛力的公司,你在技術上站得住腳,且努力額外做一些力所能及的與技術無關的事情,把公司的事情當作自己的事情來對待,以得到老板 和上司賞識,被委以重任。一旦公司以后發展起來了,或者公司上市了,你作為元老,在物質回報上自然少不了你的好處!(ps:像傳智播客這樣的公司就是一支 極具潛力的績優股,要找到這樣的公司,需要有眼光和機遇,呵呵)

                 (2)潛心修煉技術和專業技能,能獨當一面地開發出幾款小產品 (如cms,oa,crm等),然后自己多辛苦點,通過網絡等各種途徑接點類似的項目回家干,也算是額外賺點外快,比拿死工資要多點。如果通過接項目,結 識到了一些有市場攬活關系或能力的人物,彼此互補性強,又合得來,雙方可以合作,多接點賺關系錢的肥項目,一年下來也能賺個幾十萬。

                   (3)自己開公司,當老板。走這條路的成功者寥寥無幾,百分之九十以上的都會夭折,但也說不準你就是那百分之幾的幸運者和成功者。即使走這條路,也不能操 之過急,最好是在一個感興趣的行業里摸爬滾打數載,對行業的門道都很熟悉了,手頭的資源也很豐富了,一切似乎都差不多了,再加上你有強烈的創業欲望,不試 一試終生遺憾,還有那么幾個死黨支持你,這時候你就可以破繭而出了,這樣的風險就會小得多,成功的概率也就大些。

                  (4)如果上面這些中的任何一條都無法做到,那就老老實實拿著現有的工資,有工作可干,有班上就不錯了,好好享受生活的快樂,知足常樂吧,畢竟生活比你困難的人還多得是!

                最后要提醒那些試圖通過跳槽漲薪的朋友,對那些剛入行一兩年、且學習能力強的程序員來說,每次工作幾月后跳槽幾乎都能帶來薪資上的一定增長,但薪水達到一 萬以后,就會遭遇發展瓶頸,薪水就很難再有更大突破,并且由于反復跳槽,對所在公司并沒有做出沉淀性的歷史貢獻,所以薪水到了12k后,就差不多到頭了, 那些薪水能突破2w,甚至3w的人,大多是與公司同甘共苦過多年的元老。如果你遇到了好的有發展潛力的公司,請不要計較一時之得失,一定要好好珍惜這樣的 一份工作機會。

          本文是使用 B3log SoloSolo 示例 進行同步發布的。

          posted @ 2010-10-30 19:18 squirrel 閱讀(148) | 評論 (0)編輯 收藏

          10 個最酷的 Linux 單行命令,希望對你有用。

          1. sudo !!

            以 root 帳戶執行上一條命令。

          2. python -m SimpleHTTPServer

            利用 Python 搭建一個簡單的 Web 服務器,可通過 http://$HOSTNAME:8000 訪問。

          3. :w !sudo tee %

            在 Vim 中無需權限保存編輯的文件。

          4. cd -

            更改到上一次訪問的目錄。

          5. ^foo^bar

            將上一條命令中的 foo 替換為 bar,并執行。

          6. cp filename{,.bak}

            快速備份或復制文件。

          7. mtr google.com

            traceroute + ping。

          8. !whatever:p

            搜索命令歷史,但不執行。

          9. $ssh-copy-id user@host

            將 ssh keys 復制到 user@host 以啟用無密碼 SSH 登錄。

          10. ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg

            把 Linux 桌面錄制為視頻。

          本文是使用 B3log SoloSolo 示例 進行同步發布的。

          posted @ 2010-10-29 19:38 squirrel 閱讀(86) | 評論 (0)編輯 收藏

          除多年編程經驗之外,還有什么能區分一個程序員是“老手”還是“新手”?編程技巧當然是一部分,但它絕非是全部。聰明的程序員可能比他們的同行擁有更出眾的編程技巧,但那不足以說明他們就是“老手”。同樣,僅僅因為擁有10年編程經驗也并不意味著他們就是高手。在工作崗位上,擁有多年編程經驗也不能說明問題。即便沒被炒魷魚,那也不能提升你的價值。


          下面列舉的事情是大多數高級程序員都會做的。

          1.至少掌握一門編程語言

          我相信有些優秀的程序員只懂(并精通)一門編程語言,但在某種程度上而言,這其實會限制一個人的思維。就像當你手拿一把錘子時,任何東西看起來都像釘 子。我認為,知道并成功使用至少一門編程語言,這是程序員從新手走向老手的重要一步。我要說的是,像JavaScript和SQL這樣的輔助編程語言,只 有當你確實已經開發了完整的應用程序,并在其中使用這些編程語言時,它們才有價值。

          2.工作之余也經常編程

          我抱怨過把開源作為招賢的一項要求,但那僅僅因為許多充滿激情的程序員把時間花在別的地方。除了對開源有所貢獻,你還可以做兼職顧問,兼職創業,開發自己的產品或者創辦自己的微型軟件公司。當然,你也可以嘗試從外部接些兼職項目,可參考伯樂在線的這篇《成功接項目需要注意的幾個要點》。

          注:mISV即MicroISV,是一個只有一名員工組成的軟件公司,是一種微型公司。

          3.經歷完整的軟件開發過程,從概念設計到產品實現,再到產品維護

          有的程序員希望不用自己動手就可以得到詳細的設計說明,然后把缺陷代碼交給測試/維護小組,這是平庸程序員的一個縮影。任何稱職的程序員都會跟客戶密切合作,去制定需求分析,然后編碼實現,當然也要維護。如果你在編碼實現階段偷懶了,那你在維護階段不得不付出代價。

          4.不斷創新

          創新就是做一些你身邊的人沒有做過的事情,用來改善你的過程或產品。你不一定非得是世界上第一個做這件事的人,只要發現一個問題,找到解決方法然后實現它就行。

          5.編寫的軟件能解決實際問題

          有一副虛構的場景:一名黑客,僅僅是出于對技術以及自己所做事情的愛,一天到晚都在編寫代碼。但這幾乎無助于成就一名優秀的開發者。事實上,我曾見過 有些開發人員和客戶爭論,來采用更好但不太有助客戶的技術。這會適得其反。你可以利用自己的時間來完善。但涉及工作時,你最好還是編寫能實際改進并解決問 題的代碼,而不是使用那些不同尋常的算法或接口。

          編者后話

          這些問題對于任何想成為高級開發人員的朋友來說,都合情合理。因為這些問題和擁有多少年編程經驗并沒有關聯。如果你能做到上面4-5條,那你就是高級程序員。如果只有1-2條,那你還需要加油努力。

          當然,在面試中,設置一個簡單的“是或不是”問題,通常是一個衡量自己的小練習。更重要的問題會是“你能給我們舉例介紹一下嗎?”

          本文是使用 B3log SoloSolo 示例 進行同步發布的。

          posted @ 2010-10-28 18:06 squirrel 閱讀(83) | 評論 (0)編輯 收藏

          REST關鍵原則

          大部分對REST的介紹是以其正式的定義和背景作為開場的。但這兒且先按下不表,我先提出一個簡單扼要的定義:REST定義了應該如何正確地使用 (這和大多數人的實際使用方式有很大不同)Web標準,例如HTTP和URI。如果你在設計應用程序時能堅持REST原則,那就預示著你將會得到一個使用 了優質Web架構(這將讓你受益)的系統。總之,五條關鍵原則列舉如下:

          • 為所有“事物”定義ID
          • 將所有事物鏈接在一起
          • 使用標準方法
          • 資源多重表述
          • 無狀態通信

          下面讓我們進一步審視這些原則。

          為所有“事物”定義ID

          在這里我使用了“事物”來代替更正式準確的術語“資源”,因為一條如此簡單的原則,不應該被淹沒在術語當中。思考一下人們構建的系統,通常會找到一 系列值得被標識的關鍵抽象。每個事物都應該是可標識的,都應該擁有一個明顯的ID——在Web中,代表ID的統一概念是:URI。URI構成了一個全局命 名空間,使用URI標識你的關鍵資源意味著它們獲得了一個唯一、全局的ID。

          對事物使用一致的命名規則(naming scheme)最主要的好處就是你不需要提出自己的規則——而是依靠某個已被定義,在全球范圍中幾乎完美運行,并且能被絕大多數人所理解的規則。想一下你 構建的上一個應用(假設它不是采用RESTful方式構建的)中的任意一個高級對象(high-level object),那就很有可能看到許多從使用唯一標識中受益的用例。比如,如果你的應用中包含一個對顧客的抽象,那么我可以相當肯定,用戶會希望將一個指 向某個顧客的鏈接,能通過電子郵件發送到同事那里,或者加入到瀏覽器的書簽中,甚至寫到紙上。更透徹地講:如果在一個類似于Amazon.com的在線商 城中,沒有用唯一的ID(一個URI)標識它的每一件商品,可想而知這將是多么可怕的業務決策。

          當面對這個原則時,許多人驚訝于這是否意味著需要直接向外界暴露數據庫記錄(或者數據庫記錄ID)——自從多年以來面向對象的實踐告誡我們,要將持 久化的信息作為實現細節隱藏起來之后,哪怕是剛有點想法都常會使人驚恐。但是這條原則與隱藏實現細節兩者之間并沒有任何沖突:通常,值得被URI標識的事 物——資源——要比數據庫記錄抽象的多。例如,一個定單資源可以由定單項、地址以及許多其它方面(可能不希望作為單獨標識的資源暴露出來)組成。標識所有 值得標識的事物,領會這個觀念可以進一步引導你創造出在傳統的應用程序設計中不常見的資源:一個流程或者流程步驟、一次銷售、一次談判、一份報價請求—— 這都是應該被標識的事物的示例。同樣,這也會導致創建比非RESTful設計更多的持久化實體。

          下面是一些你可能想到的URI的例子:

          http://example.com/customers/1234
          http://example.com/orders/2007/10/776654
          http://example.com/products/4554
          http://example.com/processes/salary-increase-234

          正如我選擇了創建便于閱讀的URI——這是個有用的觀點,盡管不是RESTful設計所必須的——應該能十分容易地推測出URI的含義:它們明顯地標識著單一“數據項”。但是再往下看:

          http://example.com/orders/2007/11
          http://example.com/products?color=green

          首先,這兩個URI看起來與之前的稍有不同——畢竟,它們不是對一件事物的標識,而是對一類事物集合的標識(假定第一個URI標識了所有在2007年11月份提交的定單,第二個則是綠顏色產品的集合)。但是這些集合自身也是事物(資源),也應該被標識。

          注意,使用唯一、全局統一的命名規則的好處,既適用于瀏覽器中的Web應用,也適用于機對機(machine-to-machine,m2m)通信。

          來對第一個原則做下總結:使用URI標識所有值得標識的事物,特別是應用中提供的所有“高級”資源,無論這些資源代表單一數據項、數據項集合、虛擬亦或實際的對象還是計算結果等。

          將所有事物鏈接在一起

          接下來要討論的原則有一個有點令人害怕的正式描述:“超媒體被當作應用狀態引擎(Hypermedia as the engine of application state)”,有時簡寫為HATEOAS。(嚴格地說,這不是我說的。)這個描述的核心是超媒體概念,換句話說:是鏈接的思想。鏈接是我們在HTML中常見的概念,但是它的用處絕不局限于此(用于人們網絡瀏覽)。考慮一下下面這個虛構的XML片段:

          <order self="http://example.com/customers/1234"> 
          <amount>23</amount>
          <product ref="http://example.com/products/4554">
          <customer ref="http://example.com/customers/1234">
          </customer> </product></order>

          如果你觀察文檔中product和customer的鏈接,就可以很容易地想象到,應用程序(已經檢索過文檔)如何“跟隨”鏈接檢索更多的信息。當然,如果使用一個遵守專用命名規范的簡單“id”屬性作為鏈接,也是可行的——但是僅限于應用環境之內。使用URI表示鏈接的優雅之處在于,鏈接可以指向由不同應用、不同服務器甚至位于另一個大陸上的不同公司提供的資源——因為URI命名規范是全球標準,構成Web的所有資源都可以互聯互通。

          超媒體原則還有一個更重要的方面——應用“狀態”。簡而言之,實際上服務器端(如果你愿意,也可以叫服務提供者)為客戶端(服務消費者)提供一組鏈 接,使客戶端能通過鏈接將應用從一個狀態改變為另一個狀態。稍后我們會在另一篇文章中探究這個方面的影響;目前,只需要記住:鏈接是構成動態應用的非常有 效的方式。

          對此原則總結如下:任何可能的情況下,使用鏈接指引可以被標識的事物(資源)。也正是超鏈接造就了現在的Web。

          使用標準方法

          在前兩個原則的討論中暗含著一個假設:接收URI的應用程序可以通過URI明確地一些有意義的事情。如果你在公共汽車上看到一個URI,你可以將它輸入瀏覽器的地址欄中并回車——但是你的瀏覽器如何知道需要對這個URI做些什么呢?

          它知道如何去處理URI的原因在于所有的資源都支持同樣的接口,一套同樣的方法(只要你樂意,也可以稱為操作)集合。在HTTP中這被叫做動詞 (verb),除了兩個大家熟知的(GET和POST)之外,標準方法集合中還包含PUT、DELETE、HEAD和OPTIONS。這些方法的含義連同 行為許諾都一起定義在HTTP規范之中。如果你是一名OO開發人員,就可以想象到RESTful HTTP方案中的所有資源都繼承自類似于這樣的一個類(采用類Java、C#的偽語法描述,請注意關鍵的方法):

          class Resource {
          Resource(URI u);
          Response get();
          Response post(Request r);
          Response put(Request r);
          Response delete();
          }

          由于所有資源使用了同樣的接口,你可以依此使用GET方法檢索一個表述(representation)——也 就是對資源的描述。因為規范中定義了GET的語義,所以可以肯定當你調用它的時候不需要對后果負責——這就是為什么可以“安全”地調用此方法。GET方法 支持非常高效、成熟的緩存,所以在很多情況下,你甚至不需要向服務器發送請求。還可以肯定的是,GET方法具有冪等性[譯 注:指多個相同請求返回相同的結果]——如果你發送了一個GET請求沒有得到結果,你可能不知道原因是請求未能到達目的地,還是響應在反饋的途中丟失了。 冪等性保證了你可以簡單地再發送一次請求解決問題。冪等性同樣適用于PUT(基本的含義是“更新資源數據,如果資源不存在的話,則根據此URI創建一個新 的資源”)和DELETE(你完全可以一遍又一遍地操作它,直到得出結論——刪除不存在的東西沒有任何問題)方法。POST方法,通常表示“創建一個新資 源”,也能被用于調用任過程,因而它既不安全也不具有冪等性。

          如果你采用RESTful的方式暴露應用功能(如果你樂意,也可以稱為服務功能),那這條原則和它的約束同樣也適用于你。如果你已經習慣于另外的設計方式,則很難去接受這條原則——畢竟,你很可能認為你的應用包含了超出這些操作表達范圍的邏輯。請允許我花費一些時間來讓你相信不存在這樣的情況。

          來看下面這個簡單的采購方案例子:

          Sample Scenario

          可以看到,例子中定義了兩個服務程序(沒有包含任何實現細節)。這些服務程序的接口都是為了完成任務(正是我們討論的 OrderManagement和CustomerManagement服務)而定制的。如果客戶端程序試圖使用這些服務,那它必須針對這些特定接口進行 編碼——不可能在這些接口定義之前,使用客戶程序去有目的地和接口協作。這些接口定義了服務程序的應用協議(application protocol)。

          在RESTful HTTP方式中,你將通過組成HTTP應用協議的通用接口訪問服務程序。你可能會想出像這樣的方式:

          Sample Scenario, done RESTfully

          可以看到,服務程序中的特定操作被映射成為標準的HTTP方法——為了消除歧義,我創建了一組全新的資源。“這是騙人的把戲”,我聽見你叫嚷著。 不,這不是欺騙。標識一個顧客的URI上的GET方法正好相當于getCustomerDetails操作。有人用三角形形象化地說明了這一點:

          Knobs one can turn

          把三個頂點想象為你可以調節的按鈕。可以看到在第一種方法中,你擁有許多操作,許多種類的數據以及固定數量的“實例”(本質上和你擁有的服務程序數 量一致)。在第二種方法中,你擁有固定數量的操作,許多種類的數據和許多調用固定方法的對象。它的意義在于,證明了通過這兩種方式,你基本上可以表示任何 你喜歡的事情。

          為什么使用標準方法如此重要?從根本上說,它使你的應用成為Web的一部分——應用程序為Web變成Internet上最成功的應用所做的貢獻,與 它添加到Web中的資源數量成比例。采用RESTful方式,一個應用可能會向Web中添加數以百萬計的客戶URI;如果采用CORBA技術并維持應用的 原有設計方式,那它的貢獻大抵只是一個“端點(endpoint)”——就好比一個非常小的門,僅僅允許有鑰匙的人進入其中的資源域。

          統一接口也使得所有理解HTTP應用協議的組件能與你的應用交互。通用客戶程序(generic client)就是從中受益的組件的例子,例如curl、wget、代理、緩存、HTTP服務器、網關還有Google、Yahoo!、MSN等等。

          總結如下:為使客戶端程序能與你的資源相互協作,資源應該正確地實現默認的應用協議(HTTP),也就是使用標準的GET、PUT、POST和DELETE方法。

          資源多重表述

          到目前為止我們一直忽略了一個稍微復雜的問題:客戶程序如何知道該怎樣處理檢索到的數據,比如作為GET或者POST請求的結果?原因是,HTTP 采取的方式是允許數據處理和操作調用之間關系分離的。換句話說,如果客戶程序知道如何處理一種特定的數據格式,那就可以與所有提供這種表述格式的資源交 互。讓我們再用一個例子來闡明這個觀點。利用HTTP內容協商(content negotiation),客戶程序可以請求一種特定格式的表述:

          GET /customers/1234 HTTP/1.1
          Host: example.com
          Accept: application/vnd.mycompany.customer+xml

          請求的結果可能是一些由公司專有的XML格式表述的客戶信息。假設客戶程序發送另外一個不同的請求,就如下面這樣:

          GET /customers/1234 HTTP/1.1
          Host: example.com
          Accept: text/x-vcard

          結果則可能是VCard格式的客戶地址。(在這里我沒有展示響應的內容,在其HTTP Content-type頭中應該包含著關于數據類型的元數據。)這說明為什么理想的情況下,資源表述應該采用標準格式——如果客戶程序對HTTP應用協 議和一組數據格式都有所“了解”,那么它就可以用一種有意義的方式與世界上任意一個RESTful HTTP應用交互。 不幸的是,我們不可能拿到所有東西的標準格式,但是,或許我們可以想到在公司或者一些合作伙伴中使用標準格式來營造一個小環境。當然以上情況不僅適用于從 服務器端到客戶端的數據,反之既然——倘若從客戶端傳來的數據符合應用協議,那么服務器端就可以使用特定的格式處理數據,而不去關心客戶端的類型。

          在實踐中,資源多重表述還有著其它重要的好處:如果你為你的資源提供HTML和XML兩種表述方式,那這些資源不僅可以被你的應用所用,還可以被任意標準Web瀏覽器所用——也就是說,你的應用信息可以被所有會使用Web的人獲取到。

          資源多重表述還有另外一種使用方式:你可以將應用的Web UI納入到Web API中——畢竟,API的設計通常是由UI可以提供的功能驅動的,而UI也是通過API執行動作的。將這兩個任務合二為一帶來了令人驚訝的好處,這使得 使用者和調用程序都能得到更好的Web接口。

          總結:針對不同的需求提供資源多重表述。

          無狀態通信

          無狀態通信是我要講到的最后一個原則。首先,需要著重強調的是,雖然REST包含無狀態性(statelessness)的觀念,但這并不是說暴露功能的應用不能有狀態——
          事實上,在大部分情況下這會導致整個做法沒有任何用處。REST要求狀態要么被放入資源狀態中,要么保存在客戶端上。或者換句話說,服務器端不能保持除了 單次請求之外的,任何與其通信的客戶端的通信狀態。這樣做的最直接的理由就是可伸縮性—— 如果服務器需要保持客戶端狀態,那么大量的客戶端交互會嚴重影響服務器的內存可用空間(footprint)。(注意,要做到無狀態通信往往需要需要一些 重新設計——不能簡單地將一些session狀態綁縛在URI上,然后就宣稱這個應用是RESTful。)

          但除此以外,其它方面可能顯得更為重要:無狀態約束使服務器的變化對客戶端是不可見的,因為在兩次連續的請求中,客戶端并不依賴于同一臺服務器。一 個客戶端從某臺服務器上收到一份包含鏈接的文檔,當它要做一些處理時,這臺服務器宕掉了,可能是硬盤壞掉而被拿去修理,可能是軟件需要升級重啟——如果這 個客戶端訪問了從這臺服務器接收的鏈接,它不會察覺到后臺的服務器已經改變了。

          理論上的REST

          我承認:以上我所說的REST不是真正的REST,而且我可能有點過多地熱衷于簡單化。但因為我想有一個與眾不同的開場,所以沒有在一開始就介紹其正式的定義和背景。現在就讓我們稍微簡要地介紹一下這方面的內容。

          首先,先前我并沒有明確地區分HTTP、RESTful HTTP和REST。要理解這些不同方面之間的關系,我們要先來看看REST的歷史。

          Roy T. Fielding在他的博士學位論文(實際上你應該訪問這個鏈接——至少對于一篇學術論文來說,它是相當易讀的。此論文已被翻譯成中文) 中定義了術語REST。Roy曾是許多基本Web協議的主要設計者,其中包括HTTP和URIs,并且他在論文中對這些協議提出了很多想法。(這篇論文被 譽為“REST圣經”,這是恰當的——畢竟,是作者發明了這個術語,所以在定義上,他寫的任何內容都被認為是權威的。)在論文中,Roy首先定義一種方法 論來談論架構風格——高級、抽象的模式,來表達架構方法背后的核心理念。每一個架構風格由一系列的約束(constraints)定義形成。架構風格的例子包括“沒有風格”(根本沒有任何約束)、管道和過濾器(pipe and filter)、客戶端/服務器、分布式對象以及——你猜到它了——REST。

          如果對你來說這些聽起來都太抽象了,那就對了——REST在本質上是一個可以被許多不同技術實現的高層次的風格,而且可以被實例化——通過為它的抽 象特性賦上不同的值。比如,REST中包含資源和統一接口的概念——也就是說,所有資源都應該對這些相同的方法作出反應。但是REST并沒有說明是哪些方 法,或者有多少方法。

          REST風格的一個“化身”便是HTTP(以及一套相關的一套標準,比如URI),或者稍微抽象一些:Web架構自身。接著上面的例子,HTTP使 用HTTP動詞作為REST統一接口的“實例”。由于Fielding是在Web已經(或者至少是大部分)“完善”了之后才定義的REST風格,有人可能 會爭論兩者是不是100%的匹配。但是無論如何,整體上來說Web、HTTP和URI僅僅是REST風格的一個主要實現。不過,由于Roy Fielding即是REST論文的作者,又對Web架構設計有過深遠的影響,兩者相似也在情理之中。

          最后,我在前面一次又一次地使用著術語“RESTful HTTP”,原因很簡單:許多使用HTTP的應用因為一些理由并沒有遵循REST原則,有人會說使用HTTP而不遵循REST原則就等同于濫用HTTP。 當然這聽起來有點狂熱——事實上違反REST約束的原因通常是,僅僅因為每個約束帶來的設計權衡可能不適合于一些特殊情況。但通常,違背REST約束的原 因可歸咎于對其好處認知的缺乏。來看一個明顯的反面案例:使用HTTP GET調用類似于刪除對象的操作,這違反了REST的安全約束和一般性常識(客戶程序不應為此負責,服務器端開發人員大概不是有意而為之)。但在隨后的文 章中,我會提及更多這樣或那樣的對HTTP的濫用。

          總結

          本文試圖對REST(Web架構)背后的概念提供快速的介紹。RESTful HTTP暴露功能的方式與RPC、分布式對象以及Web Services是不相同的;要真正理解這些不同是需要一些心態的轉變。不管你構建的應用是僅僅想暴露Web UI還是想把API變成Web的一份子,了解下REST的原則還是有好處的。

          本文是使用 B3log Solocannysquirrel 的個人博客 進行同步發布的。

          posted @ 2010-10-22 19:43 squirrel 閱讀(121) | 評論 (0)編輯 收藏

          validation.js是一個基于prototype表單前端驗證工具,與其它庫相比,簡單易用.
          下面是對validation的介紹
          http://tetlaw.id.au/view/blog/really-easy-field-validation-with-prototype/
          ajax
          http://ajax.org/space/start/2006-05-15/2
          http://ajax.org/space/start/2006-05-22/1

          以下是對其做的擴展.

          • 新增驗證:
          • 增加min-value-number驗證,例: 最小值為10.1 = min-value-10.1
          • 增加max-value-number驗證,例: 最大值為-100.1 = min-value--100.1
          • 增加長度范圍validate-length-range-minLength-maxLength驗證,例: 最小長度為1,最大長度為10:validate-length-range-1-10
          • 增加整型數字范圍validate-int-range-minValue-maxValue驗證,例: 5至20 : validate-int-range-5-20
          • 增加浮點數字范圍validate-float-range-minValue-maxValue驗證,例: 1.1至10 : validate-float-range-1.1-10
          • 增加min-length-number驗證,例: 最小長度為10 = min-length-10
          • 增加max-length-number驗證,例: 最大長度為10 = max-length-10
          • 增加文件類型 validate-file-type1-type2-typeX 的驗證,例: validate-file-zip-png-jpeg 將驗證文件是否為zip,png,jpeg格式之一
          • 增加中文日期驗證 validate-date-cn

           

          • 修改記錄:
          • 增加Validation._getInputValue() 取代$F()方法以對file input進行驗證
          • 修正Validation.isVisible() 中while循環中elm可能不存在為空的問題
          • 增加ValidationFactory for cache
          • 修改Validation.get()方法使用indexOf()的匹配模式,以適應可以通過class傳遞參數
          • 修改errorMsg可由方法返回

          min-length-number,max-length-number,validate-file-xx1的實現機制主要是直接使用className作為參數傳遞,再在驗證方法中抽取max-length-number的number作為參數使用

          下載 http://www.aygfsteel.com/Files/badqiu/validation1.5.3.rar

          本文是使用 B3log Solocannysquirrel 的個人博客 進行同步發布的。

          posted @ 2010-10-22 19:40 squirrel 閱讀(102) | 評論 (0)編輯 收藏

               摘要: 概述jQuery 是繼 prototype 之后又一個優秀的 Javascript 框架。其宗旨是—寫更少的代碼,做更多的事情。它是輕量級的 js 庫(壓縮后只有21k) ,這是其它的 js 庫所不及 的,它兼容 CSS3,還兼容各種瀏覽器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery 是一個快速的,簡潔的 javaScrip...  閱讀全文

          posted @ 2010-10-22 19:39 squirrel 閱讀(96) | 評論 (0)編輯 收藏

          我現在是一個初學JAVA的學生,目前的學習階段是Struts 2.0,希望大家能給予幫助!!!

          posted @ 2008-07-13 15:36 squirrel 閱讀(183) | 評論 (0)編輯 收藏

          僅列出標題
          共4頁: 上一頁 1 2 3 4 
          主站蜘蛛池模板: 呼玛县| 塘沽区| 西乌珠穆沁旗| 如东县| 鄂托克旗| 华亭县| 庆城县| 公安县| 舞钢市| 丹寨县| 宽甸| 新建县| 浦北县| 靖边县| 肃北| 宁波市| 庆安县| 五寨县| 鄂托克前旗| 龙口市| 抚州市| 林甸县| 中西区| 嵩明县| 汤原县| 南涧| 金乡县| 广德县| 刚察县| 嘉鱼县| 伊宁县| 尚志市| 南澳县| 安塞县| 桂阳县| 祁连县| 视频| 铁力市| 上虞市| 宿松县| 栾川县|