REST API при выводе PHP в расширение файла JSON - PullRequest
5 голосов
/ 31 января 2010

Итак, я хочу написать 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 ]

10 голосов
/ 31 января 2010

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

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

Перепишите

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

0 голосов
/ 31 января 2010

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

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

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

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

0 голосов
/ 31 января 2010

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

НТН,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...