studio example ejemplo create java android retrofit retrofit2 type-safety

java - example - ¿Por qué Retrofit se anuncia como una biblioteca "Tipo segura"?



retrofit ejemplo (5)

Solo estaba pasando por su página principal y dice,

Un cliente HTTP seguro para el tipo para Android y Java

¿Por qué Retrofit se anuncia a sí mismo como de Tipo Seguro mientras que otras bibliotecas (muchas otras populares) no lo hacen?

Antes de contestar ...

Hay una respuesta a esta misma pregunta here . Dice,

La seguridad de tipos es la medida en que un lenguaje de programación desalienta o evita los errores de tipo. Un error de tipo es un comportamiento erróneo o no deseado del programa causado por una discrepancia entre diferentes tipos de datos para las constantes, variables y métodos (funciones) del programa, por ejemplo, tratar un número entero (int) como un número de punto flotante (flotante). Esto es común en lenguajes de tipo estático como Java y C

De este modo, la modificación evita errores de este tipo.

Si esta es realmente la respuesta, muchas bibliotecas evitan este tipo de errores, pero ninguna de ellas se anuncia como de Tipo Seguro. ¿Es entonces una cosa de marketing?

Considero que la respuesta anterior es inadecuada porque la definición de seguridad de tipo no se ha tomado en serio.

De todos modos, hay otro post con la definición de Type Safety. Ellos dan ejemplos:

La seguridad de tipo significa que el compilador validará los tipos mientras compila, y emitirá un error si intenta asignar el tipo incorrecto a una variable.

Algunos ejemplos simples:

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

Esto también se aplica a los argumentos de los métodos, ya que les estás pasando tipos explícitos:

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

Si intentara llamar a eso usando:

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

Según la definición anterior, sería el lenguaje (Java) y NO la biblioteca que es específicamente TypeSafe.

Entonces, pregunto, una vez más, ¿por qué Retrofit se anuncia a sí misma como una biblioteca de Tipo Seguro?


La razón por la que Retrofit se declara a sí mismo como Tipo seguro, se vincula directamente con el hecho de que toda la implementación se refleja y se anota en función. Maneja todas las conversiones bajo el capó para el cuerpo de solicitud y los datos de solicitud de respuesta. No permitirá la falta de coincidencia en los tipos de respuesta, desde cualquier servidor. Por lo tanto, Type Safe, recuerde que la esencia de la actualización es una API HTTp para un contrato estricto entre el cliente y el servidor.

Type Safety no está vinculado a estructuras de objetos o primitivas como lo sugiere la visión normativa, sino más bien a la construcción y enlace de cuerpos de solicitud de respuestas de red.


Mi conjetura es porque puedes usar clases personalizadas como cuerpo de solicitud, por ejemplo

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

y no siempre tienes que crear una String . La causa se creará bajo el capó, pero nunca tendrás que tocarla.


Mirando la portada del proyecto Retrofit , parece que el tipo en seguridad de tipo se refiere al cuerpo de la solicitud y los objetos del cuerpo de respuesta.

Debemos recordar que Retrofit está construido sobre OKHttp, que solo puede manejar los objetos RequestBody y ResponseBody . Retrofit se enorgullece de su capacidad para serializar de forma segura estos tipos dentro y desde otros tipos, utilizando los Converter .

La seguridad en el tipo seguridad se refiere a la modificación de todo el código de la RequestBody garantizar las conversiones de tipo correctas al construir RequestBody y analizar objetos ResponseBody . Retrofit viene con varios Converter incorporados que envuelven las bibliotecas de serialización más populares, como GSon y Jackson.

TL; DR

La seguridad de tipo que se ofrece es Retrofit asumiendo la responsabilidad de realizar una solicitud HTTP y analizar la respuesta HTTP de sus DTO.

Usted, el desarrollador, puede continuar usando la biblioteca de serialización de su elección como de costumbre y no debe preocuparse mucho por el tema.


No he estado pensando demasiado en eso, pero desde el momento en que comencé a usar Retrofit, entendí que este titular es seguro para el tipo en una capa de abstracción más alta de lo que otros hablan aquí.

Por lo general, tomamos el lenguaje de programación como un "objetivo" por estar o no a salvo de tipos. Y creo que este no es el caso de la seguridad de tipo del título de Retrofit;) Si pretendemos que una llamada HTTP completa es una única instrucción de lenguaje de programación (que podría tener algunos parámetros y el valor), podemos decir que Retrofit es de tipo -seguro ... ha definido estrictamente qué tipo de resultado está obteniendo ... y está obteniendo esto o nada / error. Por supuesto, el error está en el tiempo de ejecución, ya que nunca se puede saber realmente qué se recuperará de Internet. Por supuesto, muchas otras bibliotecas pueden hacer eso, no solo Retrofit. Por supuesto, puede confundir la seguridad de tipo de la modificación al definir el servicio con el valor de retorno del tipo ResponseBody (que podría aceptar cualquier cosa). Pero en general, de manera inmediata, está obteniendo una biblioteca que verificará, analizará, validará las respuestas de las llamadas HTTP por usted, las convertirá en los tipos adecuados y, en caso de cualquier problema, le dará un error.

Simple analogía que tengo en mi cabeza en este momento (en términos de eslogan de tipo seguro):

  • lenguaje de programación tiene: instrucción + argumentos ''y tipos de valor
  • El reacondicionamiento tiene: estructuras de llamada http + cuerpo y respuesta

Saludos cordiales, Darek


Primero veamos brevemente cómo usaría Retrofit para hacer una solicitud y obtener una respuesta. Típicamente harías esto:

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

Y luego ten una clase modelo como esta, para mantener la respuesta:

public class UserImage { @SerializedName("ImgId") private int userImageId; @SerializedName("ImgName") private String userImageName; //and so on... }

Prestado de su pregunta -

Un error de tipo es un comportamiento erróneo o no deseado del programa causado por una discrepancia entre diferentes tipos de datos para las constantes, variables y métodos (funciones) del programa, por ejemplo, tratar un número entero (int) como un número de punto flotante (flotante).

Creo que la razón por la que Retrofit se llama a sí mismo un tipo de cliente http seguro es porque no le permitirá llamar a una API que no devuelva la respuesta exacta como lo definió. Por ejemplo, si su respuesta de API usó "ImageId" en lugar de "ImgId" (Refiriéndose al ejemplo anterior), la modificación no lo permitiría. Creo que este es el tipo de seguridad al que se refiere Retrofit, es decir, seguridad de tipo específica para la serialización y deserialización, no solo para tratar int como flotante, etc., lo que hace que no sea solo algo que ofrece Java.

Espero que esto ayude.