Вернуть данные или HTML для внутреннего API CakePHP? - PullRequest
0 голосов
/ 09 августа 2011

Мне интересно узнать, какой из двух вариантов является оптимальным для API CakePHP, который я строю.API является внутренним, то есть используется только для нашего веб-сайта для связи с бэкэндом.API вызывается через jquery, и я вижу один из двух вариантов возвращаемого формата:

  1. Вернуть необработанный json и оставить его до внешнего интерфейса jquery для его анализа и построения html.
  2. Возврат обработанного html, поэтому все, что нужно сделать jquery, это добавить html в некоторый контейнер.

Оба варианта имеют свои плюсы и минусы.Я перечислю их здесь, и, возможно, вы сможете расширить этот список.

Возвращение json:

  • Плюсы: клиент имеет полную свободу действий, как он может пожелать с данными,Например, если нам нужно хранить данные в jquery о каждой ссылке, то мы можем сделать это, просматривая результаты и создавая HTML.
  • Минусы: я не вижу отличного решения относительно того, гдесохранить HTML-шаблон для отображения ссылки.Именно поэтому я и выбрал вариант 2. CakePHP имеет очень естественный способ хранения шаблонов представлений, и я воспользовался этой возможностью.Встраивание шаблонов в javascript - это отвратительно!

Возврат отрендеренного html:

  • Плюсы: Сортировка противоположности приведенному выше con;в основном, я могу использовать встроенную систему шаблонов представления CakePHP для вывода данных.
  • Минусы: неудобно хранить jquery-данные по каждой ссылке для последующего использования (например, для регистрации события onClick).В настоящее время в каждую html-ссылку я включаю такой код:

    $ ('# this-link'). Data ('someName', 'someData');

Мне интересно услышать, что другие делают для решения этой проблемы.Я читал, что Twitter возвращает html по соображениям производительности.

Спасибо всем.

Обновление: Я считаю, что мой вопрос частично решен с помощью фреймворка, подобного Backbone.js .Тем не менее, если (из соображений производительности) мы хотим отобразить html на серверной части, тогда нам все равно нужно будет передавать данные через API.Так что пример ответа json может выглядеть так:

{
  id: 67,
  html: "<a href=\"profile.php?id=61\">Who is number 67?</a>"
}

Все еще не идеально, я не думаю.Я предпочел бы, чтобы клиентский интерфейс javascript волшебным образом понимал, что это # ​​67:)

1 Ответ

0 голосов
/ 10 августа 2011

Обычно API веб-сервиса может указывать тип возвращаемых данных в запросе / type: json или / type: html.В контроллере выполните переключатель (тип): если элемент html-> render, если json renderJSON

Но так как вы не делаете его общедоступным, вы можете получить его результат, полученный с помощью html.Если у каждой ссылки есть свой идентификатор, и вы должны указать данные каждой ссылки, то я не вижу, что это намного более громоздко.Помните, у jquery есть live ('event', function () {}).Вы можете найти это полезным.

Редактировать: $(theLink).data('id', linkId) Почему бы вам просто не установить идентификатор ссылки на это?и добавьте class = "need-to-click-blah" ко всей ссылке.Так что в jquery вам просто нужно

$('.need-to-click-blah').live('click',function(){alert('link id: '+$(this).attr('id'));});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...