Из личной практики.
1. Модуль возвращает данные и только данные. Не важно в каком из форматов (JSON/XML/etc), главное что там нет разметки отвечающей за представления вида данных. HTTP заголовки тоже данные.
2. Ни каких отдельных интерфейсов AJAX/не-AJAX. Поэтому как с точки зрения сервера все эти запросы это HTTP запросы. И AJAX по сути существует на уровне клиента, этого слоя не должно быть в архитектуре серверной части.
Возможность доступа к модулю по URL оказывается полезной когда приложение разрастается до уровня больше чем один сервер. Если об этом не думать изначально на уровне архитектуры, то придется реализовывать «отдельный интерфейс». Если подумать сразу, то можно получить его сразу, искаропки так сказать.
3. Приведенный пример больше RPC, чем REST.
В доступе к модулю по HTTP не должно быть ни чего криминального если он реализован корректно. Дернули снаружи код модуля, а сами аутентификацию не прошли? Значит, если работаем в REST стиле, возращаем 403 статус ответа.