2015-01-07 2 views
1

Предполагая, что у нас есть API REST (реализованный с использованием пружин RestController), к которому обращаются как с удаленного, так и с одного и того же локального компьютера (например, клиент мобильного телефона и некоторый компонент mvc на том же сервере).Существует ли оптимизированный способ локального доступа api на основе пружины?

Для локальных компонентов программного обеспечения на той же машине, я предполагаю, что есть две крайности:

  • Либо они выполняют фактические запросы HTTP на локальном компьютере, возможно, представляя значительный ненужными накладные
  • Или они как-то назвать реализацию REST API напрямую через Java, возможно, слишком много знаний о реализации API для зависимого программного компонента

Есть ли рекомендованная средняя площадка для весны-b приложений? Какой-то обход, оптимизированный для локального выполнения, но поддерживающий API как черный ящик?

Благодаря

+0

Возможно, RMI - прочитайте здесь: http://stackoverflow.com/questions/2013793/web-services-vs-ejb-vs-rm-advantages-and-disadvantages – 6ton

+0

Я предполагаю, что вы имеете в виду не предлагать разные API через RMI, но делает REST API доступным локально через RMI? – mibollma

ответ

2

В принципе хорошего дизайна, я всегда вижу непересекающийся протокол службы от реализации услуг. Таким образом, вы можете открыть службу (например, простой Spring-компонент) в качестве службы REST, EJB или любого необходимого. Да, это больше кода, но он делает службу более устойчивой и адаптируемой к подклассам этой конкретной технологии.

Что касается вашего вопроса, это действительно зависит от того, что «на той же машине» означает:

  • же приложение, вы можете использовать один и тот же компонент, как зависимость (при перемещении реализации сервиса из контроллер REST) ​​
  • же JVM, вы можете использовать EventBus как гуава-х и кодировать бобы с помощью JSON или Protobuffer (рекомендуется)
  • же хозяин, вы можете сохранить местоположение услуги агностиком и использовать простой REST/TCP в качестве это сегодня. Я не считаю, что накладные расходы оправдывают дополнительную сложность, если только ваши требования к производительности не являются подобными торговым помещениям.

Короче говоря, если вы не очень требовательной цели производительности или Вы не можете , конечно предположить, что эти две служб всегда будут находиться в том же хосте/JVM, REST/TCP хорошо.

+0

Теоретически это звучит вполне разумно, однако на практике его перемещение из контроллера REST может быть затруднено, поскольку REST представляет собой нечто большее, чем просто протокол. Чтобы это действительно работало, нам может потребоваться абстракция более высокого уровня, включая uris, методы и язык гипертекстового приложения. – mibollma