Таким образом, я хочу записать API REST в 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.
Если вы не хотите использовать 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
global с $_SERVER['REQUEST_URI']
.
Полагаю, вы хотите добавить заголовок Content-Disposition....
<?php
header('Content-Disposition: attachment; filename="users.json"');
?>
Это заставит файл быть загруженным как user.json. Обычно это не то поведение, которое ожидается для REST API, но из того, как был сформулирован ваш вопрос, я решил выбросить его туда.
Предположим, что вы используете сервер Apache, вы также можете просто использовать директиву AddHandler
, чтобы файлы с расширением .json
обрабатывались как php.
AddHandler application/x-httpd-php .json
Предупреждение: Другие обычные файлы .json будут обработаны как PHP, так что вы, вероятно, захотите установить это в файле .htaccess в директории с PHP-скриптом. Для этого URI подойдет, но не идеально, если вы выставляете много URI
Добро пожаловать в SO. Рассматривали ли вы возможность использования Zend framework для данного приложения? Я уже писал на эту тему до , и если вы все же используете Zend, я, возможно, смогу оказать вам дополнительную помощь. Это, безусловно, помогло бы вам забыть об основах.
HTH,
-aj
Проблема в этой строке:
header("Content-type: application/json");
Я знаю, что это выглядит как правильный способ сделать (в конце концов, приложение / JSON
- Официальный тип MIME для содержания JSON), но это Заставляет большинство браузеров представить вам диалоговое окно «Загрузить файл», когда вы просто хотите увидеть текст. Вы можете использовать текст / простые
, кодируя, чтобы избежать этого. Обратите внимание, что ваш AJAX / iPhone / ... ... App, вероятно, не заботится о типе содержимого, поэтому ваш API будет работать в обоих случаях.
Также см. этот пост блога , который обеспечивает еще несколько контекстов.