2011-01-11 51 views
1

我已閱讀了許多關於REST API的文章。但我仍然很困惑。如何處理php REST url資源

他們基本上重寫url到的index.php,其處理的URL,並取決於方法,然後發送響應

,但是這是正確的方式來處理網址是什麼?這看起來doen't看起來是正確的......

  1. 得到URI,並把它分解
  2. 我應該知道如何處理各個部分,例如做。 GET/usr/1我應該這樣做:
    if($ myUri [0] ==「usr」)
    getUser($ myUri [1]);

如果請求的URL是一樣GET www.domain.com/user/1 它會調用getUser($id); 但發生什麼,如果你也可以通過名字,也許電子郵件用戶?所以網址也可以www.domain.com/user/johnwww.domain.com/user/[email protected] 每個URL應該調用不同的方法,如getUsrByName($name)getUsrByEmail($mail)

回答

3

處理正確的方法是將有這樣的網址:

domain.com/user/id/1    -> user::getById 
domain.com/user/email/[email protected] -> user::getByEmail 
domain.com/user/username/foo  -> user::getByUsername 

然而,指定多個「參數」更像是一個搜索,我會反對使用資源,因爲路徑應該是絕對的。這意味着:

domain.com/user/name/Kossel/likes/StackOverflow 

和:

domain.com/user/likes/StackOverflow/name/Kossel 

是不一樣的資源。相反,我會怎麼做:

domain.com/user/?name=Kossel&likes=StackOverflow 

這是堆棧溢出用途:

stackoverflow.com/questions/tagged/php 
stackoverflow.com/tags/php/new 
stackoverflow.com/questions/tagged/mysql?sort=featured 
+0

和怎麼樣正確的方式來處理URI?堆棧溢出如何實際處理uri/questions/tagged/mysql?sort = featured? – Kossel 2011-01-12 00:06:31

0

,以避免長時間if/else語句,使用變量函數名。這允許你使用url字符串來調用正確的函數。

http://php.net/manual/en/functions.variable-functions.php

此外,您可能需要使用類/類的方法,而不是功能。這樣你可以設置一個__autoload函數,它允許你只加載你每次調用index.php時要使用的代碼。

MVC架構通常會中斷其網址爲/ CLASS_NAME/class_method_name /參數...