当前位置:  开发笔记 > 编程语言 > 正文

在RESTful API中使用Clean URL

如何解决《在RESTfulAPI中使用CleanURL》经验,为你挑选了2个好方法。

"干净URL"也称为"RESTful URL",用户友好,纯粹是结构化的,不包含查询字符串.相反,它们只包含资源的路径.

即:"http://twitter.com/users/show/"+username+".json"

有关服务器端功能的问题:

    我是否需要为每个目录创建唯一的服务器端API脚本?

    我是否可以将所有请求转发到一个脚本,如果是这样,我如何从Clean URL结构中提取有用信息($ _GET ['url_structure'])?

    为什么twitter会调用肯定不存在的.json文件.它必须根据要求生成.这是如何运作的?这让我相信问题2的答案是肯定的.

Bailey Parke.. 60

1)如果您使用像RecessPHP这样的RESTful框架,或者如果您在.htaccess文件中使用mod_rewrite规则将所有API请求重定向到单个PHP文件(称为前端控制器),则不会.

的.htaccess

RewriteEngine On
RewriteRule ^/api/ api.php

api.php

$request = $_SERVER['REQUEST_URI'];  //this would be /users/show/abc.json

2)您可以使用apache的重写模块将所有api请求重定向到处理它们的特殊PHP文件.根据您的apache配置,原始请求的(RESTful)URL将存储在PHP中的服务器变量中,我相信它$_SERVER['REQUEST_URI'].当然,您也可以将$_GET[]变量传递给包含RESTful URL的PHP​​.

的.htaccess

RewriteEngine On
RewriteRule ^/api/([^\.]+).(xml|json|atom) api.php?url=$1&type=$2

api.php

$request_parts = explode('/', $_GET['url']); // array('users', 'show', 'abc')
$file_type     = $_GET['type'];

$output = get_data_from_db(); //Do your processing here
                              //You can outsource to other files via an include/require

//Output based on request
switch($file_type) {
    case 'json':
        echo json_encode($output);
        break;
    case 'xml':
        echo xml_encode($output); //This isn't a real function, but you can make one
        break;
    default:
        echo $output;
}

3) Twitter(以及许多其他API)使用它,因为它是一种提供应用程序期望从API返回的格式的便捷方式.所有API请求都被重新路由到一个PHP文件,该文件处理创建所有文件并将其内容回显到输出.该文件实际上从未存储在服务器上(除非它被缓存).


好资源

mod_rewrite,初学者指南

使用PHP创建REST API

隐藏PHP框架| 教程


关于RecessPHP的说明.它当然是一个很棒的工具,我鼓励你看看它(也许是从源头上了解它是如何处理事物的),但是说,它对我来说似乎有点笨拙.路径名用特殊注释写的事实对我来说似乎不是PHP.我会偏离这个,我不会称之为完美的框架,但它肯定是一个开始.祝好运!



1> Bailey Parke..:

1)如果您使用像RecessPHP这样的RESTful框架,或者如果您在.htaccess文件中使用mod_rewrite规则将所有API请求重定向到单个PHP文件(称为前端控制器),则不会.

的.htaccess

RewriteEngine On
RewriteRule ^/api/ api.php

api.php

$request = $_SERVER['REQUEST_URI'];  //this would be /users/show/abc.json

2)您可以使用apache的重写模块将所有api请求重定向到处理它们的特殊PHP文件.根据您的apache配置,原始请求的(RESTful)URL将存储在PHP中的服务器变量中,我相信它$_SERVER['REQUEST_URI'].当然,您也可以将$_GET[]变量传递给包含RESTful URL的PHP​​.

的.htaccess

RewriteEngine On
RewriteRule ^/api/([^\.]+).(xml|json|atom) api.php?url=$1&type=$2

api.php

$request_parts = explode('/', $_GET['url']); // array('users', 'show', 'abc')
$file_type     = $_GET['type'];

$output = get_data_from_db(); //Do your processing here
                              //You can outsource to other files via an include/require

//Output based on request
switch($file_type) {
    case 'json':
        echo json_encode($output);
        break;
    case 'xml':
        echo xml_encode($output); //This isn't a real function, but you can make one
        break;
    default:
        echo $output;
}

3) Twitter(以及许多其他API)使用它,因为它是一种提供应用程序期望从API返回的格式的便捷方式.所有API请求都被重新路由到一个PHP文件,该文件处理创建所有文件并将其内容回显到输出.该文件实际上从未存储在服务器上(除非它被缓存).


好资源

mod_rewrite,初学者指南

使用PHP创建REST API

隐藏PHP框架| 教程


关于RecessPHP的说明.它当然是一个很棒的工具,我鼓励你看看它(也许是从源头上了解它是如何处理事物的),但是说,它对我来说似乎有点笨拙.路径名用特殊注释写的事实对我来说似乎不是PHP.我会偏离这个,我不会称之为完美的框架,但它肯定是一个开始.祝好运!


感谢您真正覆盖它的精彩回应.我通常偏离框架,除非它节省了我很多时间.但我一定会看看Recess.

2> PHPGuru..:

这对我有用:把它放在你网站根目录下的htaccess文件中.


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule api/(.*)$ api/api.php?request=$1 [QSA,NC,L]
RewriteRule (recipe/.*) api/app.php?request=$1 [QSA,NC,L]

然后如果你去页面http:// localhost/api/person/susan 你会看到它带你到http://localhost/api/api.php的文件 我也有一个食谱页面我去使用http:// localhost/recipe/edit/2 将它放在api.php文件中:



上面的变量将包含以下类别:配方,操作:添加或编辑,以及可以是数字的数据,该数字是配方的ID或您希望的配方.然后在add_recipe.php中使用变量来确定您是在编辑还是添加配方.如果你使用api,你可以包含不同的文件,具体取决于你用来与api交谈的ajax请求.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有