Size: a a a

2019 February 15

А

Андрей in Kotlin JVM
В питоне например это очень удобно
источник

VA

Victor Alenkov in Kotlin JVM
тут вам не питон
источник

VA

Victor Alenkov in Kotlin JVM
и всё же, чем раньше будет выловлена ошибка тем лучше. Идеально - на этапе компиляции. Чтобы даже IDE сказала "чувак, у тебя тут косяк в коде - исправь".
Ведь для того для JSON API начали выдумывать схемы. Ну прям как когда-то раньше в веб-сервисах WSDL всякие были. Раньше провалидировал запрос - меньше накосячил
источник

А

Андрей in Kotlin JVM
А что с ответом делать? Если у него может быть куча разных полей в зависимости от запроса? Никак не выйдет его в какой-нибудь динамический объект парсить?
источник

BP

Bogdan Panchenko in Kotlin JVM
Андрей
А что с ответом делать? Если у него может быть куча разных полей в зависимости от запроса? Никак не выйдет его в какой-нибудь динамический объект парсить?
мапа, что ничего общего между объектами ?
источник

VA

Victor Alenkov in Kotlin JVM
посмотрите как это protobuf делает. Есть базовый класс GeneratedMessageV3 и всё остальное от него. Там где надо - кастуете к нужному классу
не может же один и тот же запрос выдавать совершенно случайную структуру
источник

RI

Ruslan Ibragimov in Kotlin JVM
Андрей
А что с ответом делать? Если у него может быть куча разных полей в зависимости от запроса? Никак не выйдет его в какой-нибудь динамический объект парсить?
Например сделать интерфейс общий, и несколько реализаций. Но в большинстве случаев ответ сервера без проблем ложится на четкую структуру.
источник

А

Андрей in Kotlin JVM
Victor Alenkov
посмотрите как это protobuf делает. Есть базовый класс GeneratedMessageV3 и всё остальное от него. Там где надо - кастуете к нужному классу
не может же один и тот же запрос выдавать совершенно случайную структуру
Спасибо, погуглю про это
источник

VA

Victor Alenkov in Kotlin JVM
Андрей
Спасибо, погуглю про это
например такая хня:

private inline fun <reified R : GeneratedMessageV3> GeneratedMessageV3.sendRequest(path: String): R { ... }

fun SigninRequest.sendRequest() = sendRequest<SigninResponse>("/signin")
источник

RI

Ruslan Ibragimov in Kotlin JVM
Андрей
Спасибо, погуглю про это
Ну и вот например как я заворачивал существующий API так, чтобы было удобно использовать https://github.com/Heapy/checkvist-kotlin/blob/master/checkvist-api/common/src/main/kotlin/io/heapy/checkvist/api/Api.kt

Нету магических строк (user.get), не нужно читать документацию чтобы понять какие там есть параметры (все явно передается)
источник

В

Вафель in Kotlin JVM
О, у меня кстати по подобному поводу вопрос, ничего же, если у меня "внутри" метод который делает абстрактный запрос к апи, принимает тупо мапу String: Any? ?
('наружу', в публичное апи, естественно торчат методы с нормальными параметрами...)
источник

RI

Ruslan Ibragimov in Kotlin JVM
Вафель
О, у меня кстати по подобному поводу вопрос, ничего же, если у меня "внутри" метод который делает абстрактный запрос к апи, принимает тупо мапу String: Any? ?
('наружу', в публичное апи, естественно торчат методы с нормальными параметрами...)
Скорее всего не очень нормально, но тут уже выбор за тобой
источник

В

Вафель in Kotlin JVM
Мне тоже не очень нравится, но не получается придумать лучше...
источник

В

Вафель in Kotlin JVM
В приватном

internal suspend fun <T> makeRequest(token: String, method: TelegramMethod, deserializer: KSerializer<T>, vararg params: Pair<String, Any?>): T = ...

А в публичном подобные методы:
источник

В

Вафель in Kotlin JVM
источник

В

Вафель in Kotlin JVM
Получается не очень красиво, но как можно сделать координально лучше, я не придумал
источник

RI

Ruslan Ibragimov in Kotlin JVM
А, ну на этом уровне особо лучше и не сделаешь
источник

VA

Victor Alenkov in Kotlin JVM
Вафель
Получается не очень красиво, но как можно сделать координально лучше, я не придумал
data class с полями, для которых указаны default value. И в свой метод принимать этот Data class
источник

В

Вафель in Kotlin JVM
Victor Alenkov
data class с полями, для которых указаны default value. И в свой метод принимать этот Data class
Неплохая идея, только как потом из data класса получать Multipart form data content?
источник

В

Вафель in Kotlin JVM
Уверен что есть способ получше такого...
источник