2014-09-07 3 views
0

В настоящее время я занимаюсь написанием слоя абстракции Http для моего приложения, поэтому я могу легко переключаться между клиентами Http в жизненном цикле моего приложения. Проблема в том, что все Http-клиенты в настоящее время (Apache, Ning, Spray, Ok и т. Д.) Используют очень разные реализации, что делает мою работу очень трудной.Http Client Abstraction Layer

Теперь мой вопрос: есть ли уже готовые проекты, которые я могу использовать, поэтому единственное, что мне нужно сделать, это написать реализации?
Если нет, то какой был бы лучший способ сделать это? Возможно, стоит упомянуть, что мой проект полностью основан на Actor Akka, поэтому интерфейс не является вариантом.

Я не прошу написать письменный код, просто концепцию, так как я не могу полностью окунуться в то, как я буду заниматься этим.

+2

Каковы ваши аргументы в пользу переключения HTTP-клиентов? Я спрашиваю, потому что это больше похоже на то, что вы хотите, - это абстракция над вашим * доменом *, которая может быть реализована различными HTTP-адаптерами. – tddmonkey

+0

Да, это лучшая терминология для этого. Я хочу легко переключаться на HTTP-адаптеры без особых хлопот. Обоснование этого btw состоит в том, что еще много интересных и интересных HTTP-клиентов еще не выпущено, но мы уже работаем над логикой (приложением) домена заранее. – Martijn

+0

Напишите свой уровень абстракции в соответствии с тем, что хочет ваш ДОМЕН, а не реализация. Переключение HTTP-адаптеров происходит так же просто, как замена любого класса – tddmonkey

ответ

1

Одним из возможных подходов будет выглядеть следующим образом:

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