Разработка
Dmitry Soroka
799

Java SDK для TJ, VC, и DTF

Давайте сделаем Комитет передовой IT-компанией.

В закладки
Картинка, чтобы пост заметили в ленте

Языки со строгой статической типизацией, такие как Java, имеют один большой минус: они очень многословны. А это означает, чтобы сделать простейшие действия, например, запрос к апи или десериализацию данных, потребуется написать ну очень большое количество рутинного кода. Чтобы показать разницу, посмотрим, как сделать один и тот же запрос на Python (динамическая типизация) и Java.

Запрос на Python:

# sending get request and saving the response as response object r = requests.get(url = URL, params = PARAMS) # extracting data in json format user = r.json() # access field of Json object print(user.id)

Три строчки! Неплохо. Теперь попробуем сделать то же самое на Java:

URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // optional default is GET con.setRequestMethod("GET"); //add request header con.setRequestProperty("User-Agent", USER_AGENT); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); String json = response.toString(); User user = new Gson().fromJson(json, User.class); // access field of object System.out.println(user.getId());

Разница очевидна.

Разумеется, для Java есть библиотеки, которые сильно упрощают жизнь при создании подобных http-запросов, но всё ещё остаётся много работы, которую придётся делать самому: написание DTO-классов, обработка ошибок, парсинг Json-ответов...

Вот я и сделал небольшую библиотечку, которую легко использовать, чтобы ддосить наш любимый комитет. Например, попробуем достать статью с TJ:

TJApiClient client = new TJApiClient("token"); Entry entry = client.entries().get().by("93120").execute(); // проверим, что все ок Assert.assertEquals("93120", entry.getId()); Assert.assertEquals("Женя Кузьмин", entry.getAuthor().getName())

Две строчки кода, чтобы сделать запрос и получить всю информацию по статье. Круто, да?

Но есть одно но: я ******** [устал] делать библиотеку один. Поэтому в SDK пока что сделано около 90% методов, в первую очередь, самые главные. И мне нужна ваша, Java-программисты, помощь. Буду рад вашим pull-реквестам, а также помощи с тестированием, поиском багов, предложениям и т. д.

И еще: я прошу официального разрешения и помощи программистов с Комитета. Я бы очень хотел, чтобы библиотека жила и была доступна Java-девелоперам со всего мира, а для этого её нужно запушить в Maven-репозиторий. Я знаю, как это сделать, но без вашей помощи не смогу. Если вам это интересно — пишите в комментариях.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы рассказать свою историю.

Написать
{ "author_name": "Dmitry Soroka", "author_type": "self", "tags": ["\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430","\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","java"], "comments": 40, "likes": 41, "favorites": 7, "is_advertisement": false, "subsite_label": "dev", "id": 94384, "is_wide": false, "is_ugc": true, "date": "Mon, 22 Apr 2019 11:25:58 +0300", "is_special": false }
0
{ "id": 94384, "author_id": 106382, "diff_limit": 1000, "urls": {"diff":"\/comments\/94384\/get","add":"\/comments\/94384\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/94384"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 232424, "last_count_and_date": null }
40 комментариев
Популярные
По порядку
Написать комментарий...
0

Тут нужна картинка с петухами

Ответить
0

Именно она, спасибо

Ответить
3

можно зайти в подсайт TJgram

Ответить
0

Джавой ещё кто-то, кроме андроид-разработчиков, пользуется?

Ответить
0

Ладно-ладно. Разработчикам для бизнеса (забыл, каким словом они обзываются) тоже можно

Ответить
2

Энтерпрайз

Ответить
0

Точно! Я с утра плохо выражаю свои мысли.

Ответить
2

Java несколько лет подряд держится на первом месте в рейтингах по популярности.

Ответить
4

Был удивлен, решил найти пруфы, не нашел. На первом месте в среднем богомерзский JS и чуть менее богомерзкий питон. Ява где-то на 3-5 месте возле ПХП, Шарпа, и плюсов

Ответить
1

Ну разные источники говорят разное, дальше 3 места не видел java. Да и вопрос вообще о том, что "java никто не пользуется". Но она очень популярна, даже если сейчас она и не занимает 1-ое место. Часто вижу как ссылаются на эту хрень https://www.tiobe.com/tiobe-index/

Ответить
0

Я больше доверяю гитхабу, он говорит про второе место. И связывает это с тем что ява очень многословна и используется в огромных комерческих проектах. А по количеству проектов на уровне с питоном 2-3 место

Ответить
0

Тут вопрос дискуссионный, что считать метрикой популярности. Питон и жс куда больше располагают к тому, чтобы выливать результаты на гитхаб. Жаба дерижтся за счет разнообразности, и мобилки и десктоп и прости Гошподи жаба-апплеты, вряд ли можно назвать прогера, который хоть где-нить с ней не сталкивался. А еще океан энтерпрайз-говна, которое на гитхаб грузить особо никто не будет.

Ответить
0

Среди кого и по каким критериям?

Ответить
3

Среди других языков, по популярности

Ответить
2

Думаю, по запросам в гугле на территории бывшего СССР более популярен 1С

Ответить
1

количество разработчиков в определенной сфере, доступность курсов по конкретным языкам, решения, которые позволяют расширить возможности языка. Ну а для построения финального рейтинга авторы используют поисковые системы, включая Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube и Baidu

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

По сути, если в языке мало чего понятно, и люди генерируют кучу курсов и вопросов в stackoverflow, то индекс будет высоким.

Ответить
0

Ну это уже холивар. Про какой-нибудь Python можно сказать что его популярность выше из-за низкого порога входа. Поэтому огромное количество гуглений "Python Hello World" выбивает его в некоторых рейтингах на первое место. Спорить нет смысла, но я уверен в одном - java очень популярна.

Еще доля java в разработке будет падать (и падает уже), из-за того, что есть Groovy & Kotlin, которые по сути своей та же java, только с большим количеством сахара (и оба этих языка совместимы в обе стороны с java)

Ответить
1

Настолько смешно, что аж нет

Ответить
1

что странно, так как у них теперь есть Котлин.

Ответить
2

молодец, но всем похуй

Ответить
10

я к этому готов

Ответить
3

А вообще круто, что ты этим занялся. Обязательно на неделе посмотрю. Респект всем, кто опенсорсит.

Ответить
3

Комментарий удален по просьбе пользователя

Ответить
0

Kotlin не таблетка от всех болячек.

Особенно когда дело касается поддержки новых версий Java, которые сейчас чуть ли ни каждые полгода выходят.

Ответить
0

Спасибо, буду знать об этой штуке.

Сгенерил проект на java, на kotlin не смог (хотя написано, что поддерживается). Качество кода плохое) Но наверное так со многими генераторами чего-либо

Ответить
0

качество всегда плохое, но это не так важно.
я обычно убираю в отдельную сборку сгенерированный клиент и оборачиваю своим интерфейсом, а в генерированный код не лезу. он не нуждается в поддержке, потому что любое изменение со стороны сервера - новая генерация

Ответить
1

Комментарий удален по просьбе пользователя

Ответить
0

А какая помощь нужна от нас? Там платная публикация?

Ответить
1

Нет, не платная. Т.к. я буду выкладывать артифакт (собранный SDK) под ru.cmtt, то меня попросят подтвердить, что ru.cmtt согласен с публикацией. Для этого они скорее всего временно попросят вас добавить какую-нибудь dns запись или что-то в этом роде

Ответить
0

Предлагаю поменять название пакета, так как он не официальный. Думаю, мы не рискнём сторонний SDK под своим именем публиковать.

Ответить
0

Да, это без проблем

Ответить
0

Не android java разработчики, а у вас не принято на любой чих, связанный с rest, использовать retrofit?

Ответить
0

Да и в обычной java есть какой-нибудь Unirest (кстати под капотом юзаю как раз эту либу). Но, как я и писал выше в статье, все равно остается много возни и рутинного кода.

Ответить
0

Первое, на что обратил внимание - нехватка информации о том, что же всё-таки за 10%, которые не сделаны.

Ответить
0

Ну это да. Я если честно не очень умею вести open source проекты)

Ответить
Обсуждаемое
Новости
В Нижневартовске бойцовская собака напала на детей возле школы
12 октября в Нижневартовске бойцовская собака напала на трёх детей на территории школы.
Истории
Жизнь на Донбассе во время войны глазами одного человека
Первая часть рассказа жителя Горловки, которая начинается с митингов в Киеве и продолжается полномасштабной войной.
Технологии
Patron Moon: предприятие Роскосмоса планирует сдавать в аренду базу с мини-АЭС на Луне
Создание лунной базы предварительно оценивается в 462 миллиона долларов.
Популярное за три дня
Новости
Прокуратура потребовала арестовать квартиру Навального. У политика нет другой недвижимости
Это назвали обеспечительной мерой по иску на пять миллионов рублей.
Кино и сериалы
«Южный парк» выпустил первую серию после запрета шоу в Китае — с фразой «нах** китайское правительство»
Кажется, создатели мультфильма не планируют идти на уступки, в отличие от НБА или Blizzard.
Интернет и мемы
Протесты в России

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "i", "ps": "cndo", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovy", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfk" } } }, { "id": 6, "disable": true, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byswn", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "cndo", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223677-0", "render_to": "inpage_VI-223677-0-130073047", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=cndo&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudv", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "ccydt", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fzvc" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "chfbk", "p2": "gnwc" } } } ]