Re: [請益] 關於 restful 設計好處 ?

作者: tkdmaf (皮皮快跑)   2015-11-05 15:06:08
※ 引述《tas72732002 (蔥頭)》之銘言:
: 目前的網站常用呼叫的api方式大都是 xxx.xxx.xxx.xxx/api/func/?para = demo
: 註 : func 是功能名稱或class ~
: 但目前我的的寫法是 xxx.xxx.xxx.xxx/api/protal.php?para = demo
: 請問要如何改寫才能改成上述的格式 ?
: 我的改法 :
: (1) 將所有訪問都只到處理router那支, 這必須在 nginx 或 apache設定轉址
: (2) router.php 根據func與參數呼叫指定的 class
: 以上是我的改法, 不知道一般做法是否是這樣
: 到我好奇的是, 兩者差在哪邊啊, 有什麼好處嗎, 使用後者還要多轉一次網址 ~
: 不太清楚好處在哪裡 ?
想想還有用回的好了,有錯的話請指正,這是依照我的經驗來看的。
很多framework都有處理路由
以ci來說不設計route也不做index.php的處理前
假設你有一個controller,叫做blog,其中有一個show的函式
路徑可能會像這樣:
http://hostname/index.php/blog/show
不過通常我們都會把index.php用.htaccess來濾掉變成
http://hostname/blog/show
也習慣上不會再使用get的網址模式例如:
http://hostname/blog/show/?param1=helloworld&param2=wonderful
會改成如下:
http://hostname/blog/show/helloworld/wonderful
也就是後續直接當做參數拋進show這個method
class blog{
function show($param1,$param2){
your code...
}
}
再來就是framework會提供的路由設計例如:
$route['blog/(:any)/(:any)'] = 'blog/show/$1/$2'
於是可以簡化成:
http://hostname/blog/helloworld/wonderful
不過到這邊其實都談不上restful………
因為你提供網址通常要的就只是一個頁面。
然而restful的請求格式通常就是要在路徑上包含請求的欄位名稱和一些要求的格式
例如:
http://resthostname/blog/show/name/ptt/address/taipei/format/json
上述分開來看格式就是:
resthostname => server的位置
blog => class名稱
show => method 名稱
name => 送出請求參數的key1,其值為ptt
address => 送出請求參數的key2,其值為taipei
format => 要求response回來的資料為json格式(通常另一種就是xml)
其實也就是說你送出給伺服器的資料就是name = ptt,address = taipei
伺服器會就你傳送的資料來判定是不是符合他的規則以及該傳給你資料還是拋錯誤給你。
如果符合所需的資料要求以及使用你傳的內容找到符合的資料。
最後就會依據你要求的格式請求將資料以既定的格式回傳給你。
用在那?
不論是是ajax或是手機裝置乃至於不同的程式語言間的資料傳遞傳換。
都遵循著相同的格式要求。
不同的語言之間只要做對應的資料轉換就可以順利取回內容。
通常較嚴謹的restful甚至你得將依照其規範壓密的內容傳過去解密。
他才會傳給你正確的資料。
不過,並不是表示restful的設計是一定按照這樣的請求格式。
即使你打算用http://resthostname/blog/ptt/taipei/json
想簡化成這樣也行。
總之概念上來說你要怎麼讓資料能順利的請求並能夠大幅降低伺服器消耗。
在開放資料的介面來說,其實就是告訴對方請求的url格式,照這個規則就可以
取回需求的資料內容。
作者: tas72732002 (蔥頭)   2015-11-05 15:32:00
那nginx或apache是不是都會先導到router那支做處理所以nginx要設定不管路徑是什麼都要轉到index.php嗎了解 你解釋很清楚 ~ 謝謝
作者: xdraculax (首席怪叔叔)   2015-11-06 10:22:00
推ci
作者: hpo14 (hpo14)   2015-11-08 11:13:00
感謝,你說得很清楚

Links booklink

Contact Us: admin [ a t ] ucptt.com