Подтвердить что ты не робот

Почему Retrofit рекламируется как библиотека "Тип Safe"?

Я просто просматривал их главную страницу, и он говорит:

Безопасный HTTP-клиент типа для Android и Java

Почему Retrofit рекламирует себя как Type Safe, в то время как другие библиотеки (многие другие популярные) не работают?

Прежде чем отвечать...

Здесь есть ответ на этот же вопрос . В нем говорится:

Тип безопасности - это степень, в которой язык программирования обескураживает или предотвращает ошибки типа. Ошибка типа ошибочна или нежелательна поведение программы, вызванное несоответствием между различными типами данных для программных констант, переменных и методов (функций), например, обрабатывая целое число (int) как число с плавающей запятой (float). Это общий в статически типизированных языках, таких как Java и C

Таким образом, Retrofit предотвращает ошибки этого типа

Если это действительно ответ, многие библиотеки предотвращают подобные ошибки, но никто из них не рекламируется как Type-Safe. Это маркетинговая штука?

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

Во всяком случае, есть другое сообщение с определением типа Safety. Они приводят примеры:

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

Несколько простых примеров:

// Fails, Trying to put an integer in a string
String one = 1;
// Also fails.
int foo = "bar";

Это также относится к аргументам метода, поскольку вы передаете явные типы к ним:

int AddTwoNumbers(int a, int b)
{
    return a + b;
}

Если я попытался вызвать это, используя:

int Sum = AddTwoNumbers(5, "5");

В соответствии с вышеприведенным определением это будет язык (Java) и NOT, который специально является TypeSafe.

Итак, я снова спрашиваю, почему Retrofit рекламирует себя как библиотеку Type-Safe?

4b9b3361

Ответ 1

Я предполагаю, что вы можете использовать пользовательские классы в качестве запроса Body, например.

@GET("/token")
Call<Token> getToken(@Body Credentials credentials);

и вам не всегда нужно создавать String. Из-за этого String будет создан под капотом, но вам никогда не придется прикасаться к нему.

Ответ 2

Давайте сначала кратко рассмотрим, как использовать Retrofit для запроса и получения ответа. Обычно вы делаете это:

@GET("user/images")
Call<UserImage> getUserImage();

И тогда у вас есть такой класс модели, чтобы сохранить ответ:

public class UserImage  {

     @SerializedName("ImgId")
     private int userImageId;

     @SerializedName("ImgName")
     private String userImageName;

     //and so on...
}

Заимствование из вашего вопроса -

Ошибка типа - это ошибочное или нежелательное поведение программы, вызванное несоответствием между различными типами данных для постоянных, переменных и методов (функций) программы, например, обработка целого числа (int) в качестве числа с плавающей запятой (float),

Я считаю, что Retrofit называет себя безопасным HTTP-клиентом типа, потому что он не позволит вам вызывать API, который не возвращает точный ответ как то, что вы определили. Например, если ваш ответ API использовал "ImageId" вместо "ImgId" (ссылаясь на приведенный выше пример), Retrofit не разрешил его. Я полагаю, что это тип безопасности Retrofit, относящийся к типу безопасности, специфичному для сериализации и десериализации, а не только для обработки int как float и т.д., Что делает его не только тем, что предоставляет Java.

Надеюсь, что это поможет.

Ответ 3

Глядя на обновить титульную страницу проекта, кажется, что тип безопасности типа относится к объекту запроса и объектам тела ответа.

Мы должны помнить, что Retrofit построен поверх OKHttp, который может обрабатывать только объекты RequestBody и ResponseBody. Retrofit гордится своей способностью безопасно сериализовать эти типы в и из других типов, используя Converter s.

Безопасность в безопасном типе относится к Retrofit, который обрабатывает весь код шаблона для обеспечения правильного преобразования типов при построении RequestBody и анализе объектов ResponseBody. Модернизация поставляется с несколькими встроенными Converter, которые обертывают популярные библиотеки сериализации, такие как GSon и Jackson.

TL; DR

Безопасность афферентного типа - это Retrofit, предполагающая ответственность за сбор HTTP-запроса и разбор HTTP-ответа из ваших DTO.

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

Ответ 4

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

Обычно мы воспринимаем язык программирования как "целевую" для того, чтобы быть или не быть безопасным по типу. И я думаю, что это не относится к титровальному типу Retrofit;) Если мы притворимся, что весь HTTP-вызов - это одна инструкция языка программирования (которая может иметь некоторые параметры и значение), тогда мы действительно можем сказать, что Retrofit является типом -safe... вы строго определили, какой результат вы получаете... и вы получаете это или ничего/ошибку. Конечно, ошибка во время выполнения, так как вы не можете никогда не знать, что будет извлечено из Интернета. Конечно, многие другие библиотеки могут это сделать, а не только "Дооснастить". Конечно, вы можете ввести в заблуждение тип безопасности Retrofit, указав сервис с возвращаемым значением типа ResponseBody (который может принять что угодно). Но, как правило, из коробки вы получаете библиотеку, которая будет проверять, анализировать, проверять ответы HTTP-вызовов для вас, преобразовывать их в соответствующие типы и в случае возникновения каких-либо проблем - приведет к ошибке.

Простая аналогия у меня сейчас у меня в голове (с точки зрения типа слогана):

  • язык программирования имеет: инструкции + аргументы и типы значений

  • модификация имеет: http-вызов + структура тела и ответа

С наилучшими пожеланиями, Дарек

Ответ 5

Причина, по которой Retrofit заявляет о себе как Type Safe, напрямую ссылается на то, что вся реализация отражена и основана на аннотации. Он обрабатывает все преобразования под капотом для запроса тела запроса и данных запроса ответа. Это не позволит несовпадать в типах ответов с любого сервера. Следовательно, Type Safe, помните, что суть retrofit - это HTTp api для строгого контракта между клиентом и сервером.

Тип Безопасность не связана с примитивными или объектными структурами, как предполагает нормативное представление, а скорее о конструкции и привязке тел запросов ответов на запросы сети.