@VZVZ
Reverse-Engineer, Software Developer, Architect

Как лучше сделать архитектуру REST API, которое берет один и тот же контент из БД MySQL, а клиенту возвращает в разных форматах: JSON, XML и HTML?

Сейчас есть 1 скрипт:
images.get.json.php
по адресу root/api/images.get

Планируется иметь 3 скрипта:
images.get.json.php
по адресу root/api/images.get
images.get.xml.php
по адресу root/api/images.get.xml
images.get.html.php
по адресу root/api/images.get.html

("Возвращать ответы в виде HTML" звучит странно, но если приглядеться к какому-нибудь VK или Facebook, то у них тоже так же, только у них это не относится к API и отличается от него до неузнаваемости. А я это хочу не только для облегчения AJAX, но и для использования в системах наподобие Cordova/Sciter/NW.js и прочем, где UI строится на HTML+CSS(+JS))

Подсознание говорит: ну не делай ты 3 отдельных скрипта, делай 1 общий, с параметром (json | xml | html), а там пусть if ... else if ... else разбирается, ну а URLу надлежащий вид придашь через htaccess...

Но увы.
htaccess терпеть не могу, регулярки терпеть не могу, это натуральный Brainfuck, слишком громоздкие скрипты тоже не люблю, короче, хочу отдельными файлами и точка.

А раз отдельными, то надо, очевидно, как-то отделить само получение данных из БД (это mysqliшный result) от тех 3 скриптов, занятых только представлением данных. И соединить всё.
Разумеется, непосредственный доступ к модели с клиента запрещен.
Как это лучше сделать?
Если бы делал для себя, то не заморачивался, тупо includeил бы модель в каждый из 3 скриптов.
Но, мой код будут оценивать Серьезные Западные Синьоры, вот думаю, может, лучше иначе как, может, есть какое общепринятое решение типа паттерна?

Хотелось бы без MVC-фреймворков (это уже специфика проекта).
Хотя и MVC как-то мало упростил бы дело... Идея-то ясна: 1 Model, 3 Action/View, но - коряво выглядит... Или нет?
  • Вопрос задан
  • 451 просмотр
Пригласить эксперта
Ответы на вопрос 2
okwinza
@okwinza
PHP Developer
Если собрались делать нормальный REST, то отдавайте в том формате, который запрашивает юзер в заголовке `Accept`, например Accept: text/plain
Ответ написан
unitby
@unitby
И все же лучше один скрипт. Который делает один и тот же запрос, создавая один и тот же объект.ну модель.
или раз хотите 3 скрипта то этот один инклюдите. и потом уже объект приводите к виду что отдавать хотите. в разных скриптах по своему получается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы