① meteor 前端restful api 怎麼傳遞數組
meteor 前端restful api 怎麼傳遞數組
指針
指針是C語言中廣泛使用的一種數據類型。運用指針編程是C語言最主要的風格之一。利用指針變數可以表示各種數據結構;能很方便地使用數組和字元串;並能象匯編語言一樣處理內存地址,從而編出精練而高效的程序。指針極大地豐富了C語言的功能。學習指針是學習C語言中最重要的一環,能否正確理解和使用指針是我們是否掌握C語言的一個標志。同時,指針也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程,上機調試。只要作到這些,指針也是不難掌握的。
10.1 地址指針的基本概念
在計算機中,所有的數據都是存放在存儲器中的。一般把存儲器中的一個位元組稱為一個內存單元,不同的數據類型所佔用的內存單元數不等,如整型量佔2個單元,字元量佔1個單元等,在前面已有詳細的介紹。為了正確地訪問這些內存單元,必須為每個內存單元編上號。根據一個內存單元的編號即可准確地找到該內存單元。內存單元的編號也叫做地址。 既然根據內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。 內存單元的指針和內存單元的內容是兩個不同的概念。 可以用一個通俗的例子來說明它們之間的關系。我們到銀行去存取款時, 銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。在這里,帳號就是存單的指針, 存款數是存單的內容。對於一個內存單元來說,單元的地址即為指針,其中存放的數據才是該單元的內容。在C語言中,允許用一個變數來存放指針,這種變數稱為指針變數。因此,一個指針變數的值就是某個內存單元的地址或稱為某內存單元的指針。
圖中,設有字元變數C,其內容為「K」(ASCII碼為十進制數 75),C佔用了011A號單元(地址用十六進數表示)。設有指針變數P,內容為011A,這種情況我們稱為P指向變數C,或說P是指向變數C的指針。
嚴格地說,一個指針是一個地址,是一個常量。而一個指針變數卻可以被賦予不同的指針值,是變數。但常把指針變數簡稱為指針。為了避免混淆,我們中約定:「指針」是指地址,是常量,「指針變數」是指取值為地址的變數。定義指針的目的是為了通過指針去訪問內存單元。
既然指針變數的值是一個地址,那麼這個地址不僅可以是變數的地址,也可以是其它數據結構的地址。在一個指針變數中存放一個數組或一個函數的首地址有何意義呢? 因為數組或函數都是連續存放的。通過訪問指針變數取得了數組或函數的首地址,也就找到了該數組或函數。這樣一來,凡是出現數組,函數的地方都可以用一個指針變數來表示,只要該指針變數中賦予數組或函數的首地址即可。這樣做,將會使程序的概念十分清楚,程序本身也精練,高效。在C語言中,一種數據類型或數據結構往往都佔有一組連續的內存單元。 用「地址」這個概念並不能很好地描述一種數據類型或數據結構,而「指針」雖然實際上也是一個地址,但它卻是一個數據結構的首地址,它是「指向」一個數據結構的,因而概念更為清楚,表示更為明確。 這也是引入「指針」概念的一個重要原因。
10.2 變數的指針和指向變數的指針變數
② Web開發中怎麼用RESTful做後端API
需要根據業務場景來做吧。
1.舊項目,是自己內部使用,並且是CRUD很頻繁,所以成功還是失敗,都是以http狀態碼區分
2.新的項目,就是提供sdk給用戶使用,sdk中封裝了對於API系統的調用,幾乎都是get,post請求,對於model的操作較少,因為涉及到了跨域的問題,就採用了jsonp的形式(關於跨域,後端也可以進行全跨域設置),調用成功還是失敗都交給 前端success回調 ,再根據介面返回的欄位進行成功失敗的區分.
③ 關於各大平台API為什麼不使用restful的風格
一個好的RESTfulAPI,應該具備以下特徵:這個API應該是對瀏覽器友好的,能夠很好地融入Web,而不是與Web格格不入。1.瀏覽器是最常見和最通用的REST客戶端。好的RESTfulAPI應該能夠使用瀏覽器+HTML完成所有的測試(不需要使用編程語言)。這樣的API還可以很方便地使用各種自動化的Web功能測試、性能測試工具來做測試。Web前端應用(基於瀏覽器的RIA應用、移動App等等)也可以很方便地將多個RESTfulAPI的功能組合起來,建造Mashup類的應用。這個API中所包含的資源和對於資源的操作,應該是直觀和容易理解的,並且符合HTTP協議的要求。REST開發又被稱作「面向資源的開發」,這說明對於資源的抽象,是設計RESTfulAPI的核心內容。RESTfulAPI建模的過程與面向對象建模類似,是以名詞為核心的。這些名詞就是資源,任何可命名的抽象概念都可以定義為一個資源。而HTTP協議並不是一種傳輸協議,它實際提供了一個操作資源的統一介面。對於資源的任何操作,都應該映射到HTTP的幾個有限的方法(常用的有GET/POST/PUT/DELETE四個方法,還有不常用的PATCH/HEAD/OPTIONS方法)上面。所以RESTfulAPI建模的過程,可以看作是具有統一介面約束的面向對象建模過程。按照HTTP協議的規定,GET方法是安全且冪等的,POST方法是既不安全也不冪等的(可以用來作為所有寫操作的通配方法),PUT、DELETE方法都是不安全但冪等的。將對資源的操作合理映射到這四個方法上面,既不過度使用某個方法(例如過度使用GET方法或POST方法),也不添加過多的操作以至於HTTP的四個方法不夠用。2.如果發現資源上的操作過多,以至於HTTP的方法不夠用,應該考慮設計出的資源。設計出資源(以及相應的URI)對於RESTfulAPI來說並沒有什麼害處。這個API應該是松耦合的。RESTfulAPI的設計包括了三個循序漸進、由低到高的層次:資源抽象、統一介面、超文本驅動。正是這三個層次確保了RESTfulAPI的松耦合性。3.當設計面向互聯網的API時,松耦合變成了一種「必須有」的強需求。緊耦合的API非常脆弱,一旦公布出去,伺服器端和客戶端都無法持續進化。尤其是伺服器端,公布出去的介面根本不敢改,改了之後,幾乎所有客戶端應用立即無法正常工作。REST這種架構風格就是緊耦合API的解毒劑,這個話題可以談的很深,這里就不了。感興趣的讀者可以參考《REST實戰》。這個API中所使用的表述格式應該是常見的通用格式在RESTfulAPI中,對於資源的操作,是通過在伺服器端-客戶端之間傳遞資源的表述來間接完成的。資源的表述可以有很多種格式,並且在響應和請求中的資源表述格式也會有所不同。GET/POST響應中的資源表述格式,常見的有HTML、XML、JSON;POST/PUT請求中的資源表述格式,常見的有標準的HTML表單參數、XML、JSON。4.這些常見表述格式,處理起來非常容易,有大量的框架和庫提供支持。所以除非有很合理的要求,通常不需要使用自定義的私有格式。使用HTTP響應狀態代碼來表達各種出錯情況HTTP響應狀態代碼,是HTTP協議這個統一介面中用來表達出錯情況的標准機制。響應狀態代碼分成兩部分:statuscode和reasonphase。兩部分都是可定製的,也可以使用標準的statuscode,只定製reasonphase。5.如果一個所謂的「RESTfulAPI」對於任何請求都返回200OK響應,在響應的消息體中返回出錯情況信息,這種做法顯然不符合「確保操作語義的可見性」這個REST架構風格的基本要求。這個API應該對於HTTP緩存是友好的6.充分利用好HTTP緩存是RESTfulAPI可伸縮性的根本。HTTP協議是一個分層的架構,從兩端的useragent到originserver之間,可以插入很多中間組件。而在整個HTTP通信鏈條的很多位置,都可以設置緩存。HTTP協議內建有很好的緩存機制,可以分成過期模型和驗證模型兩套緩存機制。如果API設計者完全沒有考慮過如何利用HTTP緩存,那麼這個API的可伸縮性會有很多問題。
④ restful api是前端使用嗎
主要就是js對數據的操作和對dom的操作。 前端的工作就是切圖,展示數據到網頁中。那麼怎麼獲取數據呢?以什麼格式獲取數據呢?都是需要和後台交互的。 後台語言都是不一樣的:php,jsp等等,我們前端js的工作就是把他們的數據拿過來顯示。
⑤ 什麼是REST API請解釋的通俗一點,它和一般的API有什麼區別
REST API是一組關於如何構建Web應用程序API的架構規則、標准或指導,REST API遵循API原則的架構風格。REST是專門針對Web應用程序而設計的,其目的在於降低開發的復雜度,提高系統的可伸縮性。
REST API和一般的API區別為:包含不同、資源不同、狀態不同。
一、包含不同
1、REST API:REST API 是API的子集;所有的REST API都是API。
2、一般的API:一般的API的為。API是REST API的超集,不是所有的API都是REST API。
二、資源不同
1、REST API:在REST API架構中,每一個資源都有與之對應的唯一資源標識符(resource identifier),當資源的狀態發生改變時,資源標識符不會發生改變。
2、一般的API:一般的API架構中,Web中所有的事物(文本、音頻、視頻、圖片、鏈接)被統一的抽象為資源(resource)。當資源的狀態發生改變時,資源標識符會發生改變。
三、狀態不同
1、REST API:在REST架構中,所有的操作都是無狀態的。REST架構不遵循CRUD原則。
2、一般的API:一般的API架構中,所有的操作都是有狀態的。遵循CRUD原則,所有的資源都可以通過GET、POST、PUT和DELETE這四種行為完成對應的操作。
⑥ 怎樣將訪問URL變成REST風格
我覺得問題很好:REST -- REpresentational State Transfer 直接翻譯:表現層狀態轉移。這個中文直譯經常出現在很多博客中。尼瑪誰聽得懂「表現層狀態轉移」?這是人話嗎?我自己也困惑了很久,查詢了很多資料,花了差不多一年有個還算清晰的理解。分享如下:
@Ivony
老師的一句話概括很精闢:
URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。
--- 簡潔版 ---
0. REST不是"rest"這個單詞,而是幾個單詞縮寫。但即使那幾個單詞說出來,也無法理解在說什麼 -_-!! (不是要貶低人,是我自己也理解困難);
1. REST描述的是在網路中client和server的一種交互形式;REST本身不實用,實用的是如何設計 RESTful API(REST風格的網路介面);
2. Server提供的RESTful API中,URL中只使用名詞來指定資源,原則上不使用動詞。「資源」是REST架構或者說整個網路處理的核心。比如:
http://api.qc.com/v1/newsfeed: 獲取某人的新鮮;
http://api.qc.com/v1/friends: 獲取某人的好友列表;
http://api.qc.com/v1/profile: 獲取某人的詳細信息;3. 用HTTP協議里的動詞來實現資源的添加,修改,刪除等操作。即通過HTTP動詞來實現資源的狀態扭轉:
GET 用來獲取資源,
POST 用來新建資源(也可以用於更新資源),
PUT 用來更新資源,
DELETE 用來刪除資源。比如:
DELETE http://api.qc.com/v1/friends: 刪除某人的好友 (在http parameter指定好友id)
POST http://api.qc.com/v1/friends: 添加好友
UPDATE http://api.qc.com/v1/profile: 更新個人資料
禁止使用: GET http://api.qc.com/v1/deleteFriend 圖例:
<img src="https://pic1.mg.com/_b.jpg" data-rawwidth="1328" data-rawheight="702" class="origin_image zh-lightbox-thumb" width="1328" data-original="https://pic1.mg.com/_r.jpg">
4. Server和Client之間傳遞某資源的一個表現形式,比如用JSON,XML傳輸文本,或者用JPG,WebP傳輸圖片等。當然還可以壓縮HTTP傳輸時的數據(on-wire data compression)。
5. 用 HTTP Status Code傳遞Server的狀態信息。比如最常用的 200 表示成功,500 表示Server內部錯誤等。
主要信息就這么點。最後是要解放思想,Web端不再用之前典型的PHP或JSP架構,而是改為前段渲染和附帶處理簡單的商務邏輯(比如AngularJS或者BackBone的一些樣例)。Web端和Server只使用上述定義的API來傳遞數據和改變數據狀態。格式一般是JSON。iOS和Android同理可得。由此可見,Web,iOS,Android和第三方開發者變為平等的角色通過一套API來共同消費Server提供的服務。
--- 詳細版 ---
先說REST名稱
REST -- REpresentational State Transfer
首先,之所以晦澀是因為前面主語被去掉了,全稱是 Resource Representational State Transfer:通俗來講就是:資源在網路中以某種表現形式進行狀態轉移。分解開來:
Resource:資源,即數據(前面說過網路的核心)。比如 newsfeed,friends等;
Representational:某種表現形式,比如用JSON,XML,JPEG等;
State Transfer:狀態變化。通過HTTP動詞實現。
REST的出處
Roy Fielding的畢業論文。這哥們參與設計HTTP協議,也是Apache Web Server項目(可惜現在已經是 nginx 的天下)的co-founder。PhD的畢業學校是 UC Irvine,Irvine在加州,有著充裕的陽光和美麗的海灘,是著名的富人區。Oculus VR 的總部就坐落於此(虛擬現實眼鏡,被FB收購,CTO為Quake和Doom的作者 John Carmack)。
眾說周知,論文都是晦澀難懂的。當年在CMU讀書的時候,很多課程都會安排每周兩篇的Paper review。現在回想起來每次寫Paper review都是我最為痛苦的時候。REST這篇博士論文毫無疑問更甚。
論文地址:Architectural Styles and the Design of Network-based Software Architectures
REST章節:Fielding Dissertation: CHAPTER 5: Representational State Transfer (REST)
REST那章我初讀了,整個論文沒有讀完 =_=
<img src="https://pic3.mg.com/_b.jpg" data-rawwidth="500" data-rawheight="375" class="origin_image zh-lightbox-thumb" width="500" data-original="https://pic3.mg.com/_r.jpg">
RESTful API
實用的是如何正確地理解 RESTful架構和設計好RESTful API。
首先為什麼要用RESTful結構呢?
大家都知道"古代"網頁是前端後端融在一起的,比如之前的PHP,JSP等。在之前的桌面時代問題不大,但是近年來移動互聯網的發展,各種類型的Client層出不窮,RESTful可以通過一套統一的介面為 Web,iOS和Android提供服務。另外對於廣大平台來說,比如Facebook platform,微博開放平台,微信公共平台等,它們不需要有顯式的前端,只需要一套提供服務的介面,於是RESTful更是它們最好的選擇。在RESTful架構下:
<img src="https://pic2.mg.com/_b.jpg" data-rawwidth="550" data-rawheight="250" class="origin_image zh-lightbox-thumb" width="550" data-original="https://pic2.mg.com/_r.jpg">
Server的API如何設計才滿足RESTful要求?
首先是簡潔版裡面的那幾點。外加一些附帶的 best practices:
1. URL root:
https://example.org/api/v1/*
https://api.example.com/v1/*2. API versioning:
可以放在URL裡面,也可以用HTTP的header:
/api/v1/
3. URI使用名詞而不是動詞,且推薦用復數。
BAD
/getProcts
/listOrders
/retrieveClientByOrder?orderId=1
GOOD
GET /procts : will return the list of all procts
POST /procts : will add a proct to the collection
GET /procts/4 : will retrieve proct #4
PATCH/PUT /procts/4 : will update proct #4
4. 保證 HEAD 和 GET 方法是安全的,不會對資源狀態有所改變(污染)。比如嚴格杜絕如下情況:
GET /deleteProct?id=1
5. 資源的地址推薦用嵌套結構。比如:
GET /friends/10375923/profile
UPDATE /profile/primaryAddress/city6. 警惕返回結果的大小。如果過大,及時進行分頁(pagination)或者加入限制(limit)。HTTP協議支持分頁(Pagination)操作,在Header中使用 Link 即可。
7. 使用正確的HTTP Status Code表示訪問狀態:HTTP/1.1: Status Code Definitions
8. 在返回結果用明確易懂的文本(String。注意返回的錯誤是要給人看的,避免用 1001 這種錯誤信息),而且適當地加入注釋。
9. 關於安全:自己的介面就用https,加上一個key做一次hash放在最後即可。考慮到國情,HTTPS在無線網路里不穩定,可以使用Application Level的加密手段把整個HTTP的payload加密。有興趣的朋友可以用手機連上電腦的共享Wi-Fi,然後用Charles監聽微信的網路請求(發照片或者刷朋友圈)。
如果是平台的API,可以用成熟但是復雜的OAuth2,新浪微博這篇:授權機制說明
各端的具體實現
如上面的圖所示,Server統一提供一套RESTful API,web+ios+android作為同等公民調用API。各端發展到現在,都有一套比較成熟的框架來幫開發者事半功倍。
-- Server --
推薦: Spring MVC 或者 Jersey 或者 Play Framework
教程:
Getting Started · Building a RESTful Web Service
-- Android --
推薦: RetroFit ( Retrofit ) 或者 Volley ( mcxiaoke/android-volley · GitHub Google官方的被block,就不貼了 )
教程:
Retrofit โ Getting Started and Create an Android Client
快速Android開發系列網路篇之Retrofit
-- iOS --
推薦:RestKit ( RestKit/RestKit · GitHub )
教程:
Developing RESTful iOS Apps with RestKit
-- Web --
推薦隨便搞!可以用重量級的AngularJS,也可以用輕量級 Backbone + jQuery 等。
教程:http://blog.javachen.com/2015/01/06/build-app-with-spring-boot-and-gradle/
參考:
[1]: Some REST best practices
[2]: GitHub API v3
[3]: tlhunter/consumer-centric-api-design · GitHub
⑦ webservice和restful的區別
restful是一種架構風格,其核心是面向資源;而webService底層SOAP協議,主要核心是面向活動。
SOAP:簡單對象訪問協議,很輕量,同時作為應用協議可以基於多種傳輸協議來傳遞消息(Http,SMTP等)。
客戶端和伺服器端的通訊方式
總結:
REST對於資源型服務介面來說很合適,同時特別適合對於效率要求很高,但是對於安全要求不高的場景。而SOAP的成熟性可以給需要提供給多開發語言的,對於安全性要求較高的介面設計帶來便利。所以我覺得純粹說什麼設計模式將會占據主導地位沒有什麼意義,關鍵還是看應用場景。
成熟度
SOAP雖然發展到現在已經脫離了初衷,但是對於異構環境服務發布和調用,以及廠商的支持都已經達到了較為成熟的情況。不同平台,開發語言之間通過SOAP來交互的web service都能夠較好的互通。
⑧ 怎樣用通俗的語言解釋什麼叫 REST,以及什麼是 RESTful
REST (REpresentation State Transfer) 描述了一個架構樣式的網路系統,比如 web 應用程序。它首次出現在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規范的主要編寫者之一。REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。Web 應用程序最重要的 REST 原則是,客戶端和伺服器之間的交互在請求之間是無狀態的。從客戶端到伺服器的每個請求都必須包含理解請求所必需的信息。如果伺服器在請求之間的任何時間點重啟,客戶端不會得到通知。此外,無狀態請求可以由任何可用伺服器回答,這十分適合雲計算之類的環境。客戶端可以緩存數據以改進性能。在伺服器端,應用程序狀態和功能可以分為各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程序對象、資料庫記錄、演算法等等。每個資源都使用 URI (Universal Resource Identifier) 得到一個惟一的地址。所有資源都共享統一的界面,以便在客戶端和伺服器之間傳輸狀態。使用的是標準的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是應用程序狀態的引擎,資源表示通過超鏈接互聯。另一個重要的 REST 原則是分層系統,這表示組件無法了解它與之交互的中間層以外的組件。通過將系統知識限制在單個層,可以限制整個系統的復雜性,促進了底層的獨立性。當REST 架構的約束條件作為一個整體應用時,將生成一個可以擴展到大量客戶端的應用程序。它還降低了客戶端和伺服器之間的交互延遲。統一界面簡化了整個系統架構,改進了子系統之間交互的可見性。REST 簡化了客戶端和伺服器的實現。RESTful的實現:RESTful Web 服務與 RPC 樣式的 Web 服務了解了什麼是什麼是REST,我們再看看RESTful的實現。最近,使用 RPC 樣式架構構建的基於 SOAP 的 Web 服務成為實現 SOA 最常用的方法。RPC 樣式的 Web 服務客戶端將一個裝滿數據的信封(包括方法和參數信息)通過 HTTP 發送到伺服器。伺服器打開信封並使用傳入參數執行指定的方法。方法的結果打包到一個信封並作為響應發回客戶端。客戶端收到響應並打開信封。每個對象都有自己獨特的方法以及僅公開一個 URI 的 RPC 樣式 Web 服務,URI 表示單個端點。它忽略 HTTP 的大部分特性且僅支持 POST 方法。由於輕量級以及通過 HTTP 直接傳輸數據的特性,Web 服務的 RESTful 方法已經成為最常見的替代方法。可以使用各種語言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])實現客戶端。RESTful Web 服務通常可以通過自動客戶端或代表用戶的應用程序訪問。但是,這種服務的簡便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構建一個 GET URL 並讀取返回的內容。在REST 樣式的 Web 服務中,每個資源都有一個地址。資源本身都是方法調用的目標,方法列表對所有資源都是一樣的。這些方法都是標准方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。在RPC 樣式的架構中,關注點在於方法,而在 REST 樣式的架構中,關注點在於資源 —— 將使用標准方法檢索並操作信息片段(使用表示的形式)。資源表示形式在表示形式中使用超鏈接互聯。Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術語 REST-RPC 混合架構。REST-RPC 混合 Web 服務不使用信封包裝方法、參數和數據,而是直接通過 HTTP 傳輸數據,這與 REST 樣式的 Web 服務是類似的。但是它不使用標準的 HTTP 方法操作資源。它在 HTTP 請求的 URI 部分存儲方法信息。好幾個知名的 Web 服務,比如 Yahoo 的 Flickr API 和 del.icio.us API 都使用這種混合架構。RESTful的實現:RESTful Web 服務的 Java 框架有兩個 Java 框架可以幫助構建 RESTful Web 服務。erome Louvel 和 Dave Pawson 開發的 Restlet(見 參考資料)是輕量級的。它實現針對各種 RESTful 系統的資源、表示、連接器和媒體類型之類的概念,包括 Web 服務。在 Restlet 框架中,客戶端和伺服器都是組件。組件通過連接器互相通信。該框架最重要的類是抽象類 Uniform 及其具體的子類 Restlet,該類的子類是專用類,比如 Application、Filter、Finder、Router 和 Route。這些子類能夠一起處理驗證、過濾、安全、數據轉換以及將傳入請求路由到相應資源等操作。Resource 類生成客戶端的表示形式。JSR-311是 Sun Microsystems 的規范,可以為開發 RESTful Web 服務定義一組 Java API。Jersey是對 JSR-311 的參考實現。JSR-311 提供一組注釋,相關類和介面都可以用來將 Java 對象作為 Web 資源展示。該規范假定 HTTP 是底層網路協議。它使用注釋提供 URI 和相應資源類之間的清晰映射,以及 HTTP 方法與 Java 對象方法之間的映射。API 支持廣泛的 HTTP 實體內容類型,包括 HTML、XML、JSON、GIF、JPG 等。它還將提供所需的插件功能,以允許使用標准方法通過應用程序添加其他類型。RESTful的實現:構建 RESTful Web 服務的多層架構RESTful Web 服務和動態 Web 應用程序在許多方面都是類似的。有時它們提供相同或非常類似的數據和函數,盡管客戶端的種類不同。例如,在線電子商務分類網站為用戶提供一個瀏覽器界面,用於搜索、查看和訂購產品。如果還提供 Web 服務供公司、零售商甚至個人能夠自動訂購產品,它將非常有用。與大部分動態 Web 應用程序一樣,Web 服務可以從多層架構的關注點分離中受益。業務邏輯和數據可以由自動客戶端和 GUI 客戶端共享。惟一的不同點在於客戶端的本質和中間層的表示層。此外,從數據訪問中分離業務邏輯可實現資料庫獨立性,並為各種類型的數據存儲提供插件能力。圖1 展示了自動化客戶端,包括 Java 和各種語言編寫的腳本,這些語言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。在瀏覽器中運行且作為 RESTful Web 服務消費者運行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬於此列,因為它們都代表用戶以自動化樣式運行。自動化 Web 服務客戶端在 Web 層向 Resource Request Handler 發送 HTTP 響應。客戶端的無狀態請求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應操作。每個請求都包含所有必需的信息,包括 Resource Request Handler 用來處理請求的憑據。從Web 服務客戶端收到請求之後,Resource Request Handler 從業務邏輯層請求服務。Resource Request Handler 確定所有概念性的實體,系統將這些實體作為資源公開,並為每個資源分配一個惟一的 URI。但是,概念性的實體在該層是不存在的。它們存在於業務邏輯層。可以使用 Jersey 或其他框架(比如 Restlet)實現 Resource Request Handler,它應該是輕量級的,將大量職責工作委託給業務層。Ajax 和 RESTful Web 服務本質上是互為補充的。它們都可以利用大量 Web 技術和標准,比如 HTML、JavaScript、瀏覽器對象、XML/JSON 和 HTTP。當然也不需要購買、安裝或配置任何主要組件來支持 Ajax 前端和 RESTful Web 服務之間的交互。RESTful Web 服務為 Ajax 提供了非常簡單的 API 來處理伺服器上資源之間的交互。圖1 中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能。Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子)。它從瀏覽器接受請求,從業務邏輯層請求服務,生成表示並對瀏覽器做出響應。表示供用戶在瀏覽器中顯示使用。表示不僅包含內容,還包含顯示的屬性,比如 HTML 和 CSS。 業務規則可以集中到業務邏輯層,該層充當表示層和數據訪問層之間的數據交換的中間層。數據以域對象或值對象的形式提供給表示層。從業務邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助於促進代碼重用,並能實現靈活和可擴展的架構。此外,由於將來可以使用新的 REST 和 MVC 框架,實現它們變得更加容易,無需重寫業務邏輯層。數據訪問層提供與數據存儲層的交互,可以使用 DAO 設計模式或者對象-關系映射解決方案(如 Hibernate、OJB 或 iBATIS)實現。作為替代方案,業務層和數據訪問層中的組件可以實現為 EJB 組件,並取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務和資源配置。但是,這需要一個遵從 Java EE 的應用伺服器(比如 JBoss),並且可能無法處理 Tomcat。該層的作用在於針對不同的數據存儲技術,從業務邏輯中分離數據訪問代碼。數據訪問層還可以作為連接其他系統的集成點,可以成為其他 Web 服務的客戶端。數據存儲層包括資料庫系統、LDAP 伺服器、文件系統和企業信息系統(包括遺留系統、事務處理系統和企業資源規劃系統)。使用該架構,您可以開始看到 RESTful Web 服務的力量,它可以靈活地成為任何企業數據存儲的統一 API,從而向以用戶為中心的 Web 應用程序公開垂直數據,並自動化批量報告腳本。什麼是REST:結束語REST 描述了一個架構樣式的互聯系統(如 Web 應用程序)。REST 約束條件作為一個整體應用時,將生成一個簡單、可擴展、有效、安全、可靠的架構。由於它簡便、輕量級以及通過 HTTP 直接傳輸數據的特性,RESTful Web 服務成為基於 SOAP 服務的一個最有前途的替代方案。用於 web 服務和動態 Web 應用程序的多層架構可以實現可重用性、簡單性、可擴展性和組件可響應性的清晰分離。Ajax 和 RESTful Web 服務本質上是互為補充的。
⑨ 基於restful怎樣寫web前端
Yii框架 Yii是一個基於組件、用於開發大型 Web 應用的 高性能 PHP 框架。Yii 幾乎擁有了 所有的特性 ,包括 MVC、DAO/ActiveRecord、I18N/L10N、caching、基於 JQuery 的 AJAX 支持、用戶認證和基於角色的訪問控制、腳手架、輸入驗證、部件
⑩ 如何理解rest和restful,什麼是restfulAPI
簡單理解一
就是用URL定位資源,用HTTP描述操作。
簡單理解二
URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。
官方定義
一種軟體架構風格、設計風格,而不是標准,只是提供了一組設計原則和約束條件。它主要用於客戶端和伺服器交互類的軟體。基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現緩存等機制。
以web開發舉例
在設計web介面的時候,REST主要是用於定義介面名,介面名一般是用名次寫,不用動詞,那怎麼表達「獲取」或者「刪除」或者「更新」這樣的操作呢——用請求類型來區分。
比如,我們有一個students介面,對於「學生」我們有增刪改查四種操作,怎麼定義REST介面?
增加一個學生,uri: http://testcode.com/school/students 介面類型:POST
刪除一個朋友,uri: http://testcode.com/school/students 介面類型:DELETE
修改一個朋友,uri: http://testcode.com/school/students 介面類型:PUT
查找朋友,uri: http://testcode.com/school/students 介面類型:GET
上面我們定義的四個介面就是符合REST協議的,請注意,這幾個介面都沒有動詞,只有名詞students,都是通過Http請求的介面類型來判斷是什麼業務操作。
舉個反例
uri: http://testcode.com/school/addStudents 該介面用來表示增加學生,這就是不符合REST協議的介面。
建議
用HTTP Status Code傳遞Server的狀態信息。比如最常用的 200 表示成功,500 表示Server內部錯誤,403表示Bad Request等。(反例:傳統web開發返回的狀態碼一律都是200,其實不可取。)
REST風格介面意義
前後端分離。前端拿到數據只負責展示和渲染,不對數據做任何處理。後端處理數據並以JSON格式傳輸出去,定義這樣一套統一的介面,在web,ios,android三端都可以用相同的介面,節約開發成本以及便於同一調試。