Могу поделиться своим опытом в этом плане, возможно это окажется вам полезно. Мы делали REST API для мобильных клентов (iOS, Android) и допустили ужасную ошибку, сделав в первой версии приложения с API, изначально предназначенным для AJAX. Как оказалось, особенность внешних клиентов заключается в том, что мы не имеем над ними никакого контроля: однажды запущенное приложение будет посылать такие и только такие запросы, которые в него заложены, а с размножением версий ситуация только осложняется. Поэтому API вынуждено оставаться совместимым, что оказалось очень нежелательно и некрасиво при внесении изменений в логику и структуру сервиса. Дальше — хуже. Поскольку вызовы API были сделаны «гибкими», по принципу «мало команд — больше настроек», во многие заранее на стороне клиента передавались параметры выдачи (фильтры, количество элементов на странице и т.д.). После деплоя приложений этими параметрами стало невозможно управлять. Сейчас, в новой версии, эти ошибки учтены с помощью дополнительной прослойки, реализующей принцип «много команд, минимум настроек»: для каждой версии API (отдельно для сайта и версий внешних клиентов) существуют разные обёртки, с подстановкой заранее подготовленных фильтров, проверок и формата выдачи. Это позволяет контролировать менять логику поведения внешних клиентов на сервере, огранизовать серсионность и совместимость.