API REST в выход PHP для расширения JSON-файла

Поэтому я хочу написать REST API в PHP для JSON для потребления на iPhone, а также множество веб-сайтов и устройств. У меня есть код ниже, при доступе через инструкцию GET возвращает файл, например:

1mdi2o3.part

Как мне вернуть что-то вроде: users.json

$db->setQuery( "SELECT * FROM users"); $db->query() or die($queryError); $numRows = $db->getNumRows(); $row = $db->loadObjectList(); // PRINT JSON FILE header("Content-type: application/json"); for($i = 0 ; $i < $numRows; $i++){ $json_output[$i] = $row[$i]; } $MYjson_output = json_encode($json_output); echo $MYjson_output; 

Не совсем такая, какова ваша цель, но здесь есть 3-4 решения, которые могут работать:

Общие решения

перезапись

Это, скорее всего, самый обычный способ получения чистых URI для вашего API. Если вы хотите, чтобы пользовательская часть user.json была динамической, вы можете использовать mod_rewrite (опять же предполагая, что Apache) переписать ваши URL-адреса на скрипт обработчика php. Если вы собираетесь использовать обычный маршрут URL в стиле RESTful, вы, вероятно, захотите использовать его для достижения чистых / разделенных URL-адресов.

 # For grabbing all users RewriteEngine on RewriteRule ^users\.json rest.php [L] # For grabbing one particular user RewriteEngine on RewriteRule ^([a-z0-9]+)\.json rest.php?user=$1 [L] 

Где rest.php – ваш скрипт обработчика PHP.

URL-редирект без модификации

Если вы не хотите использовать mod_rewrite, вы также можете сделать что-то вроде

 example.com/rest.php/users.json example.com/rest.php/user-id.json 

или даже

 example.com/rest.php/user-id example.com/rest.php/user/user-id 

Где rest.php – ваш скрипт обработчика PHP. Вы можете получить user-id из URL (или URI, если мы говорим о терминах RESTful), используя глобальный $_SERVER['REQUEST_URI'] с $_SERVER['REQUEST_URI'] .

Другие решения

Изменение имени загрузки через Content-Disposition:

Я считаю, что вы хотите добавить заголовок Content-Disposition …

 <?php header('Content-Disposition: attachment; filename="users.json"'); ?> 

Это заставит файл загружаться как user.json. Обычно это не поведение, ожидаемое для REST API, но из того, как был сформулирован ваш вопрос, я решил, что выброшу его там.

AddHandler (или AddType)

Предполагая, что вы используете сервер Apache, вы также можете просто использовать директиву AddHandler чтобы .json расширения .json обрабатывались так же, как и php.

 AddHandler application/x-httpd-php .json 

Предупреждение: Другие простые файлы .json будут обрабатываться как PHP, поэтому вы, вероятно, захотите установить это в файле .htaccess в каталоге с PHP-скриптом. Это будет отлично работать для этого URI, но не идеально, если вы подвергаете много URI

Добро пожаловать в SO. Рассматривали ли вы использование рамки Zend для этого приложения? Я уже писал об этой теме , и если вы используете Zend, я, возможно, буду иметь дополнительную помощь. Это, безусловно, поможет вам пройти мимо основ.

НТН,

Проблема в этой строке:

 header("Content-type: application/json"); 

Я знаю, что это выглядит как правильный способ (в конце концов, application/json является официальным типом MIME для содержимого JSON), но это заставляет большинство браузеров представить вам диалог загрузки файлов, когда вы просто хотите увидеть текст. Чтобы избежать этого, вы можете использовать кодировку text/plain . Обратите внимание, что ваше приложение AJAX / iPhone / …, вероятно, не заботится о типе контента, поэтому ваш API будет работать в обоих случаях.

Также см. Это сообщение в блоге, в котором содержится еще один контекст.