Sinatra с Padrino или Rails для веб-API?

Я программирую на Rails уже около 7 месяцев. В основном приложение для администрирования базы данных, вы знаете, очистки, обновления, удаления, поиска потерянных записей и т. д.

У меня есть API, который взаимодействует с нашими настольными программами, написанными на PHP. Теперь мы обнаруживаем, что хотим перенести все на Ruby. Этот API должен быть молниеносным и не будет иметь никаких представлений или HTML-страниц любого рода, он будет взаимодействовать с нашими приложениями только через JSON, отправляя и получая данные, которые приложения затем будут отображать и с которыми работать.

Итак, основной вопрос заключается в том, должен ли я изучать Sinatra и Padrino (с ActiveRecord) и создавать с их помощью API или делать это в Rails?

Если бы я использовал Rails, я мог бы сохранить большую часть кода, который у меня есть, или даже использовать существующий код, поскольку все таблицы одинаковы (база данных та же), и просто написать больше методов для API.

Минус, который я вижу в этом, двоякий:

  1. Это означает, что кодом сложнее управлять и читать, потому что теперь у нас есть часть API и вся часть обслуживания.
  2. Это означало бы, что одно и то же приложение Ruby выполняет двойную работу, поэтому API не будет таким быстрым, как если бы он работал в другом, отдельном приложении Ruby.
  3. Приложение Rails уже не очень быстрое, но я подозреваю, что это больше связано с нашим решением для хостинга, чем с самим Rails.

Изучение Sinatra и Padrino может быть более трудоемким, но это приведет к более чистому коду и отдельному Ruby-приложению для API и еще одному для обслуживания, что звучит приятнее.

Но я ничего не знаю о Синатре и Падрино, а размер и скорость действительно лучше, чем у Rails?

Я был бы очень признателен за мнения людей, которые действительно использовали Rails и Sinatra с Padrino.

Ваше здоровье.


person kakubei    schedule 01.10.2012    source источник


Ответы (2)


Синатра и Падрино автоматически не быстрее, чем Rails. Они просто меньше, чем Rails (и предоставляют разработчику меньший, более специализированный набор инструментов). Скорость приложения в основном зависит от вашего кода (и алгоритма). То же самое часто верно для элегантности, ремонтопригодности и других аспектов.

Если у вас уже есть хороший, поддерживаемый код, работающий на Rails, скорее всего, вам следует просто улучшить его. Ускорьте его с помощью хорошего решения для хостинга/кэширования и сделайте его элегантным и удобным в обслуживании с помощью рефакторинга.

В настоящее время и Rails, и Sinatra предлагают очень хорошую поддержку для разработки веб-сервисов RESTful и, в более общем плане, для разработки API-интерфейсов без пользовательского интерфейса. Rails просто больше и требует больше времени для освоения, но, к счастью, вам не нужно изучать и использовать все это чудовище, чтобы выполнить свою работу. Приложение, работающее на Rails, может быть таким же быстрым и элегантным, как приложение, работающее на Sinatra, потому что подмножество Rails, фактически используемое для обработки запросов REST, такое же маленькое и элегантное, как и вся платформа Sinatra. Следовательно, скорость приложения в основном зависит от вашего кода и вашего выбора хостинга/кеширования.

С другой стороны, вы должны изучить Синатру и Падрино в любом случае. Эти фреймворки — два самых элегантных и увлекательных программного обеспечения, которые я когда-либо видел. Они абсолютно заслуживают вашего внимания. Просто имейте в виду, что Sinatra, используемого отдельно, обычно недостаточно для чего-то более сложного, чем RESTful API без пользовательского интерфейса. Скорее всего, для настоящего полноценного веб-приложения потребуется Padrino.

person AlexBottoni    schedule 02.10.2012
comment
Спасибо, Алекс. Если нет такой разницы между Rails и Sinatra с Padrino, где бы вы использовали один и где другой? - person kakubei; 02.10.2012
comment
Обычно я стараюсь использовать наименьшую сложность фреймворка, необходимую для выполнения поставленной задачи. Для голого веб-сервиса RESTful (без пользовательского интерфейса) я использую Sinatra. Для небольших/обычных веб-сайтов я предпочитаю Падрино. Я использую Rails только в том случае, если проект с самого начала имеет дело с большим, многофункциональным и сложным веб-приложением. Помимо этого, Rails предлагает вам множество готовых функций и множество простых в использовании плагинов, поэтому во многих случаях проще/быстрее использовать Rails, чем заново создавать все с нуля. - person AlexBottoni; 02.10.2012

Если у вас уже есть существующее приложение Rails, может быть проще перенести его на API-интерфейс рельсов. По сути, это просто Rails, но лишенный всех компонентов, используемых при создании пользовательского интерфейса.

Я лично не использовал его, но я оценивал его для проекта несколько месяцев назад.

person Noel Llevares    schedule 10.10.2012
comment
Хммм... Это выглядит интригующе, но, просто прочитав их github Readme, я не вижу преимуществ использования этого над Падрино. Не могли бы вы? - person kakubei; 11.10.2012
comment
Я думаю, все сводится к чьим-то предпочтениям. Если вы уже хорошо разбираетесь в Rails и у вас мало времени, возможно, лучше пока не изучать что-то новое. - person Noel Llevares; 12.10.2012
comment
Я использую его уже 3 месяца в продакшене и должен сказать, что с Rails-API действительно приятно работать, и он отлично справляется со своей задачей. - person yagooar; 01.10.2013