Перенаправлять HTTP-запросы RESTfull API с http-сервера в мое приложение - PullRequest
1 голос
/ 07 января 2011

У меня вопрос по поводу дизайна приложения, над которым я работаю.

Я сделал монолитное Java-приложение с открытыми сокетами 24/7, что-то вроде игрового сервера. Я просто пытаюсь сказать, что это одно jar-приложение, а не модульное веб-приложение на основе сервлетов / страниц.

Теперь я хотел бы добавить RESTful API в это приложение. Таким образом, люди / клиенты могут отправлять HTTP-запросы в мое приложение для получения определенной информации. Из-за монолитной природы моего Java-приложения я не уверен, как это реализовать. Еще одна важная вещь: я ожидаю несколько запросов в секунду, поэтому было бы неплохо, если бы я мог иметь существующий http-сервер, обрабатывающий запросы, и каким-то образом пересылать их в мое приложение для настройки ответа и отправлять http-сервер это снова.

Некоторые вещи, о которых я думал:

  • завернуть мое приложение в приложение tomcat, хотя я не уверен, что tomcat может запускать приложение непрерывно вместо сопоставления с сервлетами по запросу.

  • открыть сокет и самостоятельно проанализировать входящие http-запросы (или, возможно, для этого есть библиотека?). Я боюсь, что это повлияет на производительность и скорее будет использовать существующие http-серверы, потому что они оптимизированы для большого трафика.

  • использовать существующий http-сервер для обработки запросов (apache, lighttp, ...) и пересылать запросы в мое приложение через такие вещи, как scgi, или использовать сервер, который может пересылать через XMLRPC. Есть ли другие технологии / протоколы для этого?

Какой-нибудь совет, как с этим справиться? Спасибо!

1 Ответ

0 голосов
/ 07 января 2011

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

Clients <== REST (HTTP) ==> RESTful endpoint <== legacy (sockets) ==> Legacy backend

Таким образом, ваш REST-сервер является поставщиком услуг для ваших клиентов, но в то же время представляет собой и клиента для вашего исходного бэкэнда.

Я бы разработал RESTful API, а затем выбрал одну из существующих сред REST для Java, например Restlet, и реализовал сам сервис REST. В то же время вы можете начать реализацию шлюза между сервером REST и исходным бэкэндом, используя сокеты.

Обратите внимание на масштабируемость и производительность (т. Е. Вы можете использовать пулы соединений для моста rest <=> backend и не создавать сокет для каждого входящего запроса API), а также подумать о возможных преимуществах HTTP. Вы можете извлечь выгоду, когда сможете использовать кэширование и т. Д., Если это позволяет логика вашего внутреннего приложения.

...