The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
В мире Java существует множество HTTP-клиентов для выбора. Тем не менее, я решил создать новый, потому что ни один из других клиентов полностью не удовлетворял всем моим требованиям. Возможно, я слишком требователен. Вот как взаимодействует мой клиент jcabi-http при выполнении HTTP-запроса и ожидании успешной HTML-страницы в ответе:
Я разработал этот новый клиент с учетом следующих требований:
Для меня это было самым важным требованием. Клиент должен быть простым и удобным в использовании. В большинстве случаев, мне нужно только отправить HTTP-запрос и обработать JSON-ответ, чтобы получить значение. Например, так я использую нового клиента для получения текущего курса евро.
Предполагаю, что вышеизложенное легко понять и поддерживать.
Новый клиент должен быть свободным, что означает, что вся взаимодействие с сервером помещается в одно выражение Java. Почему это важно? Я считаю, что потоковый интерфейс является самым компактным и выразительным способом выполнения нескольких императивных вызовов. По моим сведениям, ни одна из существующих библиотек не позволяет обеспечить такой потоковый стиль.
Я большой поклонник интерфейсов, главным образом потому, что они делают ваши дизайны более чистыми и высокорасширяемыми одновременно. В jcabi-http есть пять интерфейсов, расширенных двадцатью классами.
Request
является интерфейсом, а также Response
, RequestURI
и RequestBody
, предоставляемые им.
Использование интерфейсов делает библиотеку высокорасширяемой. Например, у нас есть JdkRequest
и ApacheRequest
, которые выполняют фактические HTTP-запросы к серверу с использованием двух полностью разных технологий: (JDK HttpURLConnection
и Apache HTTP Client соответственно). В будущем будет возможно внедрить новые реализации, не нарушая существующий код.
Предположим, например, я хочу получить страницу и затем что-то с ней сделать. Эти два вызова выполняют задачу по-разному, но конечные результаты одинаковы:
XML and JSON Out-of-the-Box
Существует два распространенных стандарта, которые я хотел, чтобы библиотека поддерживала сразу из коробки. В большинстве случаев ответ, полученный с сервера, имеет формат XML или JSON. Мне всегда было неудобно и дополнительной работой парсить вывод, чтобы решить проблемы с форматированием.
Клиент jcabi-http поддерживает их оба из коробки, и в будущем можно будет добавить еще форматов по мере необходимости. Например, вы можете получить XML и извлечь строковое значение из его элемента:
В основном, ответ, полученный с помощью fetch()
, декорируется с помощью XmlResponse
. Затем это позволяет использовать метод xml()
, который возвращает экземпляр интерфейса XML
.
То же самое можно сделать с JSON с помощью Java JSON API (JSR-353).
Ни одна из библиотек, о которых я знаю или с которыми работал, не предлагает такую возможность.
Последнее требование, но, безусловно, не менее важное, состоит в том, что мне нужно, чтобы все интерфейсы библиотеки были аннотированы @Immutable
. Это важно, потому что я должен иметь возможность инкапсулировать экземпляр Request
в других неизменяемых классах.
пс. Краткое резюме этой статьи было опубликовано на JavaLobby
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-22 at 10:35