几周以来,我一直在研究RESTful Service API,但是
我开始在使用/API/login
调用我的API时遇到问题它告诉我<p>The requested URL /API/login was not found on this server.</p>
请参阅我用来测试Chrome的Advanced Rest Client Extension的截图。
现在可以通过在代码内部创建一个.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');
}
}
答案 0 :(得分:1)
我会尝试这个,以及专为过去使用的SLIM构建的Auth库:http://www.appelsiini.net/projects/slim-basic-auth
这比尝试创建自己的更好。
它不错,它不需要任何数据库,并为您处理所有授权。