Я бы предложил, чтобы API, находящийся в том же проекте, что и ваш сайт, не был плохим, если код СУХОЙ *.Как вы указали, наличие отдельных кодовых баз является проблемой, потому что вы должны поддерживать их синхронизацию с каждой функцией / исправлением, которое вы делаете.Проще поддерживать, если они в одном месте.Пока вы сохраняете свой код СУХИМЫМ, этот метод является явным победителем.
Я бы предложил XML и JSON от контроллеров с поддоменом, обрабатываемым механизмом маршрутизации Rails.Когда кто-то воспользовался шаблоном api.site.com/resource.xml и попытается получить доступ к ресурсу, которого там нет, это не имеет большого значения.Если ваш API-интерфейс задокументирован четко и вы ошибочно / изящно ошибаетесь, когда они пытаются получить доступ к ресурсу, не входящему в ваш API-интерфейс, все должно быть в порядке.Я бы попытался вернуть сообщение о том, что ресурс недоступен, и URL-адрес вашей документации API.Это не должно быть проблемой во время выполнения для любых потребителей API, так как это должно быть частью обнаружения вашего API.
Только мои $ 0,02.
* СУХОЙ = Не повторяйся.СУХОЙ код означает, что вы не копируете и не переписываете одно и то же для своего сайта и API;Вы извлекаете и звоните из нескольких мест.