Re: [請益] 所以,到底什麼是RESTful API?

作者: lion741205 (獅子)   2019-03-11 18:54:48
要了解RESTful,必須與RPC及SOAP一起對比
Remote Procedure Call (RPC):起源於1976年,允許Client遠端呼叫Server的子程式,
然後將執行結果返回給Client;當時的傳輸資料常使用二進制格式,為了統一資料傳輸格
式,隨後出現了XML-RPC, XML作為資料交換語言的RPC機制。
Simple Object Access Protocol (SOAP):起源於1998年,由於RPC經常被Firewall及
Proxy Server阻擋,為解決兼容及安全性問題,採用HTTP(起源於1989)是更好的方法,
SOAP還提供了一套標準方法讓程式間可以互相通信。可以簡單把SOAP當作RPC+XML+
HTTP(POST only)+有狀態的通信方法。
Representational State Transfer (REST/RESTful)起源於2000年,由於SOAP過於複雜且
依賴狀態,REST提倡使用標準的HTTP中的四種動作GET、PUT、POST及DELETE,以及Uniform
Resource Identifier (URI)來指定資源,降低開發的複雜性。可以簡單把REST當作PRC+
XML+HTTP(GET,PUT,POST,DELETE)+URI+無狀態的通信方法。
發展趨勢:
REST風格相比XML-RPC及SOAP更加簡潔易用,而JSON資料交換語言相較XML更加輕量,目前
大多數的Web Service都採用REST+JSON作為傳輸方法。
※ 引述《thefattiger (LawTea)》之銘言:
: 因為Web_Design板滿冷清的所以來這邊問
: 若不適當請告知
: 小弟不是Web領域的, 但也難免會碰到相關的東西
: 常聽到寫Web App的人會講到這個名詞
: 但查了一下資訊卻還是摸不著頭緒
: 估狗RESTful API 大概都是講到一下幾點
: 1.資源要用URL表示
: 這不是本來就這樣的嗎?
: 還是指別濫用query string?
: 關於query string與RESTful實在眾說紛紜, 查了很久也找不到令人信服的答案
: 2.Server要回傳對應的Http Status Code
: 這不是也本來就這樣的嗎?
: 3.用GET/POST/PUT等動詞表達對資源的操作
: 意思是說, 本來只有GET/POST用法, 但其實還有PUT/PATCH/DELETE等等
: 應該要善加利用這些動詞把操作分得更清楚?
: 4.Stateless
: 這也很常看到,但Http不是本來就Stateless的嗎?
: 要記錄state一般不都借助於session和cookie?
: 還是不RESTful的Api會有某種state?
: 5.資源傳遞的格式
: 這部分似乎不在RESTful的範圍,可以是json也可以是XML
: 有Web領域的前輩可以指點一下嗎?
: RESTful真的很神秘, 問身邊的人每個認為的重點都不太一樣
作者: qrtt1 (有些事,有時候。。。)   2019-03-11 19:18:00
其實要加入以 resource 為中心的設計思想,不然花比較protocol 或風格,只會有『好簡單』 vs 『好麻煩』的結果
作者: WunoW (WunoW)   2019-03-11 19:19:00
現在用restful+json都覺得理所當然,反而覺得以前的人用那些像是腦袋有洞
作者: qrtt1 (有些事,有時候。。。)   2019-03-11 19:20:00
s/花/光/ 。動詞是針對特定資源的狀態變更不要一直覺得別人腦袋有洞啊,過去那些東西是給企業端用的他們有現成的工具可以快速整合,跟新創圈或新開的小公司要自己手刻是不同的情境啊。試著上網查一下有沒有舊的教學http://bit.ly/2SUdNaN 竟然連 esb tool 都能接 rest 了啊
作者: seedli (帶骨的火腿)   2019-03-11 19:46:00
SOAP相較REST還是有他的優勢,許多EDI的協定還是使用SOAP
作者: jej (晃奶大馬桶)   2019-03-11 21:21:00
記得那時候restful剛起來的時候還有一堆老外問說soap和json要問我們系統要用哪個如果用json要怎麼加簽之類的...現在都用的理所當然的
作者: darklose (疝氣aPerl)   2019-03-12 15:54:00
推這篇
作者: pichubaby (Pichu)   2019-03-16 17:09:00
推這篇

Links booklink

Contact Us: admin [ a t ] ucptt.com