RESTful Service API

时间:2015-07-22 13:16:30

标签: php apache .htaccess api rest

几周以来,我一直在研究RESTful Service API,但是 我开始在使用/API/login调用我的API时遇到问题它告诉我<p>The requested URL /API/login was not found on this server.</p>请参阅我用来测试Chrome的Advanced Rest Client Extension的截图。

Screencapture of the test

现在可以通过在代码内部创建一个.htaccess文件来解决这个问题:

RewriteEngine On    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

执行此操作后,出现了下一个问题,即我无法再使用授权,因为它会被忽略。

正如您所看到的那样,服务器正在Apache服务器上运行,因此不应该成为问题吗?

现在我的想法是,使用.htacces文件并不是很理想,我宁愿只使用标题中的授权调用url,如果发件人已获得授权,则返回一个json对象。

我是朝着正确的方向前进,还是我完全错了?

编辑:情境草图

应该能够从知道授权密钥和令牌的任何应用程序或网站调用此API,以确定谁在与我交谈,例如我是一个拥有多个办公室的超市老板,有人想知道有多少和什么那些办公室他会问我。

http://jeanpaulvanhouten.nl/API/getOffices

我会告诉他;

{"office":{"address":"nowhere street 123","country":"holland","employees":0}}

甚至是多个办事处。

但是提问者不必对网址做任何事情,它只会向网址提出问题并得到json响应,之后会话就完成了。

修改:授权部分

在我的index.php中(每个用户在调用我的API时获得的主页面)我有一个标题检查:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Authorization, token, Content-Type');

// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

然后我告诉服务器允许哪些标题我检查它们是否真的设置了:

// Simpel authorisation
$headers = apache_request_headers();

if (isset($headers['Authorization']) == true) {
    $api_key = $headers['Authorization'];
    $token = $headers['token'];

    if ($api_key == 'test' && $token == '123') {

        $app->run();

    } else {
        $app->status('401');
        echo json_encode('No Access');
    }
}

1 个答案:

答案 0 :(得分:1)

我会尝试这个,以及专为过去使用的SLIM构建的Auth库:http://www.appelsiini.net/projects/slim-basic-auth

这比尝试创建自己的更好。

它不错,它不需要任何数据库,并为您处理所有授权。