2011-01-11 87 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 /参数...