Возврат HTML или XML на основе запроса в PHP - PullRequest
1 голос
/ 03 июня 2011

Существует существующий веб-сайт, написанный на PHP.Первоначально существовал только веб-сайт, но в настоящее время создается приложение для Android, которое выиграет от повторного использования некоторой логики PHP.

Сайт PHP был структурирован таким образом, что существует много страниц, выполняющих действие.информацию об успехе / ошибке в $_SESSION, а затем перенаправить на визуальную страницу без вывода содержимого.Например, есть action_login.php:

Страница принимает имя пользователя и пароль (из переменных GET или POST), проверяет учетные данные, устанавливает сообщения об успехе / неудаче в $ _SESSION, а затем перенаправляет вошедшего в системудомашняя страница в случае успеха или вернуться к экрану входа в случае неудачи.Давайте назовем это поведение «ответом HTML».

Приложению Android нужно будет вызвать ту же страницу, но каким-то образом сказать ему, что вместо этого ему нужен «ответ XML».Когда страница обнаруживает это, она выводит сообщение об успехе / ошибке в формате XML вместо того, чтобы помещать их в $_SESSION, а не будет перенаправлять .Это идея в любом случае.Это помогает предотвратить дублирование кода.Я не хочу, чтобы action_login.php и action_login.xml.php плавали вокруг.

Я читал, что заголовок Accept недостаточно надежен для использования (см .: Недопустимый HTTP-браузерПринять заголовки (да, вы Safari и Internet Explorer) ).Мое альтернативное решение - POST xml=1 или использовать {url}?xml=1 для запросов GET.Есть ли лучший способ?

Фреймворки не используются, это обычный PHP.

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

Я бы пошел с приложением для Android, отправляющим куки для каждого запроса (на самом деле я бы предпочел заголовок Accept, но с проблемами, которые вы указали с помощью webkit, я понимаю ваше нежелание делать это).Файл cookie упрощает код на стороне сервера, чтобы не проверять наличие $ _GET ['xml'] или $ _POST ['xml'], и если какой-то пользователь Android поделился URL-адресом вашего приложения и у него было? Xml = 1,пользователь, открывающий это в браузере компьютера, получит XML вместо обычного веб-вывода.

Я бы не стал полагаться на $ _SESSION для мобильных приложений, поскольку пользователи (или, по крайней мере, я) на мобильных платформах склонныоткройте свое приложение, играйте 5 минут, положите мобильный телефон в карман и через 2 часа вернитесь в свое приложение.Вы хотите установить продолжительность сеанса так долго?

2 голосов
/ 03 июня 2011

Это то, для чего предназначен заголовок Accept. Пусть Android запросит страницу как application / xml, а затем проверьте, что было запрошено в вашем скрипте. Вы также можете быть заинтересованы в mod_negotiation при использовании Apache. Или используйте WURFL для определения UserAgent и использования в качестве XML при Android.

1 голос
/ 03 июня 2011

почему бы не установить конкретную сессию для приложения, а затем установить заголовок только в том случае, если для сеанса задано что-то вроде

$_SESSION['app'] = "andriod app";

if ($_SESSION['app'] == "andriod app") {
  header..

, но я не совсем уверен, как реализовать это в приложении, как яВы действительно мало работали с приложениями, но надеюсь, что это поможет вашему мыслительному процессу

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