REST API в выводе PHP к расширению файла JSON

Таким образом, я хочу записать 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;
5
задан Brian H 30 January 2010 в 22:21
поделиться

3 ответа

Не совсем такова ваша цель, но вот 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

Если вы не хотите использовать 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:

Полагаю, вы хотите добавить заголовок Content-Disposition....

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

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

AddHandler (или AddType)

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

AddHandler application/x-httpd-php .json

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

10
ответ дан 14 December 2019 в 13:36
поделиться

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

HTH,

-aj

-2
ответ дан 14 December 2019 в 13:36
поделиться

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

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

Я знаю, что это выглядит как правильный способ сделать (в конце концов, приложение / JSON - Официальный тип MIME для содержания JSON), но это Заставляет большинство браузеров представить вам диалоговое окно «Загрузить файл», когда вы просто хотите увидеть текст. Вы можете использовать текст / простые , кодируя, чтобы избежать этого. Обратите внимание, что ваш AJAX / iPhone / ... ... App, вероятно, не заботится о типе содержимого, поэтому ваш API будет работать в обоих случаях.

Также см. этот пост блога , который обеспечивает еще несколько контекстов.

-2
ответ дан 14 December 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: