2013-09-16 43 views
4

我開始了我的第一個基於REST的應用程序,並且有一個可能的小問題。PHP中的REST URL映射和物理實現

實施例:資源 「書」:

1- GET www.domain.com/api/book/ - 得到所有的書籍(在體內可能的參數) 2- GET www.domain.com/ api/book/1234 - 獲得Book實例的詳細信息,ID = 1234(身體中沒有參數) 3 GET GET www.domain.com/api/book/1234/author - 獲取本書的作者該ID = 1234

我想知道這些服務的物理服務器端實施。哪個PHP文件會存儲相應的代碼?是否有一些服務器配置要完成?

我想我會有類似這樣的一個服務器文件夾結構: API /電子書/ API /作家/

...和裏面的一些PHP文件: API /電子書/ file.php api/author/file.php

我是否還應該有一個物理文件夾api/book/1234,或者它在某種程度上被api/book /中的腳本處理過?

謝謝!

我應該在哪裏代碼

+0

你使用一些框架? – pregmatch

+0

@pregmatch:尚未定義。 – Aleks

回答

2

實施一般

  1. 您應該所有的請求重定向到一個文件中的htaccess + mod_rewite。
  2. 然後你應該用PHP解析URI。
  3. 一個Controller類,根據解析的參數決定要執行的操作。

例如:

www.domain.com/api/book/1234 

您解析它到:

action: book 
id:  1234 

所以你運行showBook()行動參數1234 - showBook(1234),這將做的工作的所有的休息。

但是...

我建議使用REST應用程序的一些簡單的框架。例如Slim Framework

+0

很好的答案。 http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller - 對於問題的作者也是有用的。 –

+0

@dragoste:「所有對一個文件的請求」是指「所有應用程序請求」或所有「與書相關的請求」? 換句話說,我應該只有一個入口PHP文件的應用程序範圍或以某種方式更細粒度的結構? – Aleks

+1

我的意思是整個應用程序的所有請求。這是做這種事情最流行的方式。但是,如果你認爲,以其他方式做它會更好,這很好。這不是唯一的解決方案。 –