2012-12-06 138 views
0

這是一項家庭作業任務。它涉及到創建一個簡單的數據庫並對服務器進行CURL調用以從數據庫中獲取結果,因此我有一個包含所需方法的DBClass文件。我理解REST架構通常是什麼,但我無法將這些部分放在一起。這是我到目前爲止有:在PHP中設計基本的Restful API

  1. Model.class.php - >這是數據庫類實例化到數據庫的連接,並具有執行的數據庫查詢並返回結果的方法。
  2. Simulator.php - >輔助類,模擬HTTP請求(POST或GET只)到本地主機,所以我的捲曲調用就成了 'HTTP://localhost/app/index.php'
  3. index.php - >這裏是哪裏我收到CURL請求,實際上,我解碼HTTP請求以理解請求方法,參數,URI等。

在這一點上,我迷路了。可以理解的是,RESTful API請求本質上屬於服務器/ getMeMyBananas,getMeMyBananas是一種爲用戶查找香蕉並返回ID的DB方法。我很困惑這是如何映射到index.php文件和缺失的部分。

建議和鏈接到真棒資源是最受歡迎的。我對安全性或創建最先進的Web服務不感興趣。

+1

你可以用mod_rewrite來模擬其他的,比如wordpress。所以index.php?m = getmebananas變成http:/ localhost/getmebananas/ –

+0

我明白了,謝謝:) –

+0

這裏有一個指向mod_rewrite的教程的鏈接http://www.sitepoint.com/guide-url-rewriting/ –

回答

1

getMeMyBananas是一個RPC路線

在REST的一個例子中,四個主要的HTTP動詞GET,POST,PUT和DELETE是在一個名詞(資源)採取行動的動詞。

REST不是標準。對於如何使用HTTP作爲基礎爲遠程系統構建API,這是一個寬鬆的建議。

沒有什麼可以說你不能在REST API中設計類似RPC的路由。人們一直這樣做。它只是主要使用動詞來創建(POST),檢索(GET),更新(PUT)或刪除(DELETE)。這使得縮寫CRUD。因此,通過REST,您只需堅持使用CRUD即可覆蓋很多信息交換場景。因此,您可以從設計您的URL(路由)開始,類似名詞(資源),並在PHP中構建一個切換案例以打開HTTP動詞。請記住,沒有什麼可以阻止的,並且有類似RPC的路由沒有任何問題。事實上,你不能使用簡單的REST CRUD場景來處理所有的情況,所以你必須使用類似RPC的路由來處理那些不適合該場景的情況。

參見:

http://dojotoolkit.org/reference-guide/1.8/quickstart/rest.html

以後,如果你有興趣在PHP中內置了API,我建立了一個API的基礎設施和開源了它。我不知道這是否會幫助你,但在這裏它是:

https://github.com/homer6/blank_altumo

+1

好點,所以GET本地主機/香蕉檢索列表,POST本地主機/香蕉創建一個新的等 –

+0

是的,你可以想到郵政發送一封信到郵箱。就像數據報一樣,你不知道它是ID還是發生了什麼事情,一旦它離開了可見性。但是,當你知道這個ID的時候,PUT就是用它來修改現有記錄的原因。 POST與創建關聯的唯一原因是因爲您通常不會在數據庫支持的API(其中大部分都包含該API)中分配ID。數據庫將根據自動增量進行分配。但是,如果您知道該ID(例如,它是一個名稱而不是自動遞增整數),則可以使用PUT創建記錄 – Homer6

+0

如果您堅持將POST作爲create和PUT作爲編輯,那麼您不太可能獲得騷擾任何地方。大多數人在該級別理解它。 – Homer6

1

您可以將任何URL映射到任何你想要的路徑!
例如,使用Apache的時候可以使用ModRewritehttp://ex.com/rest/bananashttp://ex.com/index.php?p1=rest&p2=bananas

從那裏你可以現在你可以使用全局變量取你的請求參數獲得,例如:$_GET["p1"]。 我建議你對這些進行isset()測試。

之後,當你有數據時,我建議將它打包成JSON格式,這樣幾乎任何客戶端都可以讀取它。

這基本上就是我該怎麼做的!如果你有更多的問題,請繼續:)

+0

感謝@marctrem。所以在技術上可以有幾種方法,例如getBananas,getApples,saveApples,saveBananas等,每個方法在我的DB.class.php文件中都有相應的方法。我的index.php文件初始化一個DB類的實例,相應地獲取/發佈這些資源。 –

+0

要做到這一點,index.php中有相應的方法,如getBananas(){return $ this-> DBObject-> getBananas();}。我無法包裹我的頭是ModRewrite。我得到你可以映射任何URL到任何路徑,但getBananas()是我的index.php文件中的一種方法,它不是一個路徑。這是我越來越糊塗:( –

+0

產卵你的對象在switch語句。我非常喜歡switch語句,因爲它們避免XSS服務器上,包括你可以做 開關($ _ GET [「P2」]) { 情況「getBananas」: //產卵getBananas 突破; 案 「getWhatever」: //產卵getWhatever 突破; 情況下默認: //產卵的錯誤,不明白 休息; } – marctrem