2012-04-27 18 views
2

我將在這個例子中顯示兩種類型的查詢字符串。 我知道,對於一個Web服務的查詢字符串,應該看起來更1比2REST與PHP,如何選擇查詢字符串

  1. http://localhost/findbyproductcode/4xxheua
  2. http://localhost/findbyproductcode?productcode=4xxheua

我的問題是:你如何管理在PHP的第一個?這不僅僅是第二個URL的重寫?

#2查詢字符串,我想有一個處理GET變量(?productcode = 4xxheua)的findbyproductcode.php頁面,用這個產品代碼檢查一些數據庫併發回一些數據。

#1應該如何工作?我應該有一個4xxheua.php? (顯然不是......)...我只是沒有得到這個。

+0

_「我知道一個Web服務的查詢字符串應該看起來像多於1」 - 爲什麼? – Halcyon 2012-04-27 20:12:17

+0

我真的看不到方便,但它被許多人稱爲更優雅,它是某種方式來做到這一點......但是,這只是一個URL重寫規則?我認爲不,我只是不知道這應該如何工作... – Mattia 2012-04-27 20:18:37

+0

這是REST Api的工作方式,url/resource_name/id。 Btw服務器端(其餘服務器)和客戶端URL由許多現有的軟件處理。例如我使用CodeIgniter Rest服務器來處理客戶端的請求和Backbone.js。雖然你可以(如果你想)通過GET/POST/DELETE/PUT – kernelpanic 2012-04-27 20:33:26

回答

2

你比1更喜歡1的唯一原因是因爲1在語義上更直觀。

這是有道理的,有一個像一個網址:

http://www.myblog.com/article/2012-04-29/i-did-nothing-all-day

不是

http://www.myblog.com/index.php?page=article&id=23423

據說它還有助於你的SEO得分。

如果您只是建立一個web服務,例如:機器與機器對話 - 那麼URL的外觀並不重要。您也可以只有一個URL接受所有輸入,並根據輸入數據在內部執行「路由」。

+0

所以它只是網址重寫? – Mattia 2012-04-27 20:24:12

+0

是的,這只是爲了讓網址看起來更有光澤。沒有_technical_ reason。 – Halcyon 2012-04-27 20:25:22

1

如果你正在嘗試編寫一個API,那麼我們有一堆工作要做 - 是的,涉及到重寫,但不一定要成爲所有參數的頁面 - Luracast有一個很好的開源Rest API調用ed restler開始使用。

+0

是爲簡單的web服務編寫API(我的客戶端可能是智能手機) – Mattia 2012-04-27 20:23:01

1

一個示例實現#1,

1:發送所有路徑沒有圖像,CSS(等)以root/index.php(例如mod_rewrite的在Apache)
2:在index.php,從$_SERVER['pathinfo']獲得的參數或其他方式。
3:解析並處理它。

如果使用Apatche和mod_rewrite的,檢查文檔:

0

沒錯,只是URL重寫。我使用的Symfony 1.3此刻,他們htaccess的是這樣的:

Options +FollowSymLinks +ExecCGI 

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # uncomment the following line, if you are having trouble 
    # getting no_script_name to work 
    #RewriteBase/

    # we skip all files with .something 
    #RewriteCond %{REQUEST_URI} \..+$ 
    #RewriteCond %{REQUEST_URI} !\.html$ 
    #RewriteRule .* - [L] 

    # we check if the .html version is here (caching) 
    RewriteRule ^$ index.html [QSA] 
    RewriteRule ^([^.]+)$ $1.html [QSA] 
    RewriteCond %{REQUEST_FILENAME} !-f 

    # no, so we redirect to our front web controller 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

在這種情況下,只要你的index.php控制器,你可以得到這個虛擬主機發送給它的所有URL。簡單!