API как ядро ​​для сайта и мобильного приложения - PullRequest
7 голосов
/ 26 февраля 2012

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

Я планирую переписать сайт сообщества.Наш клиент хочет использовать нативные мобильные приложения в будущем.Поэтому мне нужно будет принять это во внимание.По этой причине я решил создать 100% REST API-архитектуру на основе PHP-фреймворка Kohana.Я выбрал Kohana, потому что это позволяет легко масштабировать внутренний API на другой сервер без особых дополнительных усилий.(Kohana угрожает внутренним URL-запросам не как HTTP, так что вначале нет больших накладных расходов и может масштабироваться до HTTP с некоторыми незначительными изменениями кода).

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

Базовая структура REST выглядит следующим образом:

  1. / cats
  2. / cats / 1
  3. / cats / 1 / custom

Например, «custom» может быть «childs».

то же самое относится к:

  1. / ads
  2. / ставки
  3. / пользователи
  4. / баннеры
  5. и т. Д.

Это идеальные объекты для API, потому чтомобильное приложение определенно будет использовать все эти функции.

Таким образом, мы можем сделать вывод, что ядром сайта является REST.В общем, я хочу сделать сайт клиентом API, как и нативное приложение в будущем.Этот способ обслуживания кажется намного проще.

Что меня беспокоит, так это тот факт, что это намного больше (управление загруженными файлами, выставление счетов, автоматическая почта для выставления счетов, автоматическая почта для рекламы и так далее).Загрузка файлов должна проходить через сайт в API.Это обычная практика?Если я этого не сделаю, веб-сайт будет выполнять логику загрузки, что делает сайт больше не клиентским, а само приложение.Следовательно, мобильное приложение не может даже загружать, и API и веб-сайт должны знать папку загрузки (дублирующая логика).

Я думал о создании следующих модулей:

  1. community-api
  2. community-website

Тогда кажется, что Api является ядром.Но .... как насчет cronjobs и т.д?На самом деле они не должны быть частью сайта, так как это просто «клиент».Я чувствую, что они должны взаимодействовать напрямую с моделью или API.Таким образом, в основном API становится чем-то вроде шлюза к ядру, и я подумал, что мне нужно это:

  1. community-core
    • Models
    • Cronjobs
    • Автоматические рассылки (часть cronjobs)
      • Счета и т. Д.
  2. community-api
    • Взаимодействие с моделями в ядре через HTTP
  3. community-website
    • Website
    • Admin

Основные cronjobs являются исключениемструктура ОТДЫХА.Они единственные, кто может изменять данные без прохождения API.По крайней мере, это была моя идея, потому что они принадлежат ядру, а API находится сверху ядра.

Но по дизайну это кажется просто неправильным.Манипулирование должно проходить только через API!

Альтернатива:

  1. community-core
    • Модели
  2. community-api
    • Взаимодействие с моделями в ядре через HTTP
  3. бизнес сообщества
    • Cronjobs
    • Автоматическая рассылка (часть cronjobs)
      • Счета и т. Д.
  4. сайт сообщества
    • Сайт
    • Администратор

Это выглядит лучше для меня. Иллюстрация Mindmap http://mauserrifle.nl/mindmap.jpg

Основные вопросы

1)

Должны ли cronjobs манипулировать через модели API или Core?

2)

Для моего счета-фактуры нужен шаблон, в основном стиль основного веб-сайта. Но если мой cronjob является частью бизнеса или основной деятельности, он не будет знать о моем основном веб-сайте. Какой смысл решать это?

3)

Мой сайт будет использовать усы в качестве движка шаблонов. (и php, и javascript могут анализировать эти шаблоны). Я подумал об использовании api напрямую для вызовов ajax, но потом понял:

Сайт получает данные из API, форматирует временные метки в даты (Y-m-d) для шаблона и затем отображает. Если я позволю javascript вызывать api напрямую, javascript тоже должен иметь логику (форматирование). Это дублированный код! Похоже, что единственным решением является вызов веб-сайта для ajax (который вызывает API и форматы) и возвращает отформатированный JSON. Я прав?

Но .... простые вызовы, такие как удаление рекламы, могут проходить через API напрямую (например, УДАЛИТЬ: / ads / 1

Я получаю смесь звонков ....

Есть ли лучшее решение для этого?

4) * * тысяча сто сорок четыре

В целом: моя архитектура слишком сложна? Какие альтернативы я должен рассмотреть?

Буду рад услышать ваши отзывы!

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012

Однажды я услышал, что хорошим способом разработки веб-приложения является разработка API-ориентированного веб-приложения .Дело в том, что для меня, если вы соединяете основной сервис с публичным API, создавая приложение, ориентированное на API, вы теряете весь смысл разработки публичного API вообще.

2 голосов
/ 27 февраля 2012

Это не кажется мне логичным.

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

Для общедоступного API он должен находиться в отдельном блоке, если возможно, повторно используя одни и те же классы домена, но с разными методами аутентификации, чтобы любая проблема могла возникнуть, это не повлияет на основную службу.

Ваши задания cron должны использоваться только для запуска вызова через сам API, и эти вызовы должны выполняться в основном приложении (веб-сайт через API)

Если вы создаете свой сайт без повторения, например, используя тот же код, что и база, и оборачиваете вокруг него веб-приложение, у вас не возникнет проблем в вопросе q # 2.

То же самое относится и к вопросу № 3. Если вы оберните сайт вокруг API, веб-сайт может использовать сам API, не будучи отдельной сущностью.

Ваша архитектура кажется сложной, но если вы сделаете эти вещи, она будет простой. ; -)

Удачи!

0 голосов
/ 27 февраля 2012

REST - это только один из способов инициировать запрос.Ваш основной код, который обрабатывает запрос, не должен быть тесно связан с интерфейсом REST или HTTP в этом отношении.Я бы посоветовал проектировать ваш REST API в виде простого преобразователя во включаемый файл или что-то подобное.Ваш cron может затем обойти весь REST API и просто включить файл напрямую.Отделите интерфейс запроса от кода, который выполняет фактическую обработку.

...