2015-07-22 2 views
1

С тех пор как я работаю над API RESTful Service, но У меня возникли проблемы с вызовом моего API с помощью /API/login, он сказал мне, что <p>The requested URL /API/login was not found on this server.</p> См. Скриншот, который я сделал из расширенного клиентского расширения клиента Chrome, который Я тестировал его.RESTful Service API

Screencapture of the test

Теперь эта проблема может быть решена путем создания файла .htaccess с внутренней этого кода:

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

После этого следующая проблема возникла, что я не мог использовать разрешение больше , потому что он игнорируется.

Как вы можете видеть, сервер работает на сервере Apache, поэтому это не должно быть проблемой, не так ли?

Теперь мои мысли состоят в том, что использование файла .htacces на самом деле не идеальное, я бы скорее просто вызвал URL-адрес с авторизацией в заголовке и возвратил объект json, если санкционирован.

Я двигаюсь в правильном направлении, или я совершенно не прав?

EDIT: Ситуация Эскиз

Этот API должен быть в состоянии быть вызван из любого приложения или веб-сайт, который знает ключ авторизации и маркер, чтобы определить, кто говорит со мной, например, я владелец супермаркета с несколько офисов, и кто-то хочет знать, сколько и каких офисов он будет спрашивать.

http://jeanpaulvanhouten.nl/API/getOffices 

и я бы сказал ему;

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

или даже несколько офисов.

Но ассеру не нужно ничего делать с URL-адресом, он просто задал бы вопрос на URL-адрес и получил бы ответ json, после чего разговор был сделан.

Edit: Authorization часть

в моем 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

Вы двигаетесь в правильном направлении, отправив auth в заголовке от клиента к серверу. Вы просто используете .htaccess для хороших URL-адресов? – Rob

+0

я использую.htacces, потому что я прочитал, что это исправит, позвольте мне изменить свой вопрос с эскизом ситуации. –

+0

Используете ли вы среду MVC? – dgig

ответ

1

Я бы попробовал это, и библиотека Auth специально построена для S LIM, который я использовал в прошлом: http://www.appelsiini.net/projects/slim-basic-auth

Это лучше, чем пытаться создать свой собственный.

Что хорошо, ему не нужна база данных и обрабатывает все полномочия для вас.

+0

Ницца! это (если документация правильная) также работает вместе с моим файлом .htaccess, мой вопрос по-прежнему остается, если это лучшая практика для того, что я хочу выполнить, но я всегда могу изменить свой метод :) Я собираюсь проверить это позже сегодня :) –

+0

Я бы предположил, что использование тестируемого расширения SLIM с SLIM лучше, чем создание собственного, но это похоже на мое мнение, человек. – dgig

+0

Я нашел этот прекрасный созданный SLIM инструмент с тонким базовым auth, который уже встроен в него: https://github.com/erkobridee/restful-bookmarks-phpslim Он работает как шарм, за исключением разрешения, которое я, похоже, не могу реализовать правильно, должен ли я задать новый вопрос об этом или обновить этот? –