Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

112
Vistas
¿Generar un cliente http detrás de una interfaz mecanografiada? ¿Es posible?

Estoy tratando de entender los decoradores que no son anotaciones de Java sino más bien preprocesadores en este artículo y también encontré esta pregunta SO sobre la configuración de información en una función. Digamos que tengo una interfaz así

 export default interface UserService { @Path("/users/create") @POST createUser(user: CreateUserRequest): Promise<CreateUserResponse>; @Path("/users/delete") @POST deleteUser(user: DeleteUserRequest): Promise<DeleteUserResponse>; }

nota al margen: sería genial usar este cliente generado en la interfaz de usuario de reacción, así como en nodejs

Quiero que mi @Path y @POST, @GET guarden información que puedo leer y creo

 class Path(path:string): def __init__(self, path): self.path = path def __call__(self, func): func.pathAnnotation = self return func

Leí que no puedo recorrer los métodos en una interfaz, pero me gustaría generar el cliente http que implementa esta interfaz para que cualquier desarrollador de API cree, automáticamente crea la implementación. (En java, usamos Proxy.java para generar una implementación). En el lado del servidor, el controlador implementa exactamente la misma API y me gusta generar el 'andamio', es decir, la solicitud http a qué punto final llamar si es posible (no estoy seguro de poder hacerlo en nodejs todavía).

EDITAR: una idea: tal vez, creo una clase o clase abstracta y cada método arroja una excepción "Usar XXXFactory para generar la implementación de esta clase". ¿Cómo hago un bucle sobre el método en esa clase? ¿Y puedo crear clases que amplíen todas estas 'apis' en tiempo de ejecución de modo que pueda inyectarlo para que todos lo usen (como Proxy.java en el mundo de Java)?

EDITAR: tal vez podría hacer esto en javascript con una clase prototipo de alguna manera ... generar todos los métodos para llamar a un método con firma

 Promise<Object> invoke(String method, object[] paramsToMethod);

Luego, puedo buscar el método y las propiedades @Path y @GET/@POST en ese método. ¿Puede una clase prototipo extender una clase en javascript de tal manera que esta clase implemente cualquier API definida (quizás definida en mecanografiado)? Entonces, ¿tengo todas las API implementadas por el mismo código para cada microservicio como lo hacemos en Java? (Esto significa que el equipo de la plataforma puede intercambiar protocolos y los desarrolladores ya no se preocupan por los protocolos como http, http2, binario, etc.)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

De acuerdo con la solicitud, me tomé un tiempo para jugar con la reflexión. La reflexión se necesita principalmente para que el cliente se ajuste automáticamente a lo que espera el servicio (tipo de parámetros/tipo de retorno), y creo que podría ser posible con reflect-metadata .

Bien, la idea es que los decoradores almacenen metadatos sobre el método en un mapa, donde una clave es la clase y el valor es una colección de métodos con metadatos.

Luego, donde obtiene el cliente, agrega todos los metadatos para cada método en una función que se puede usar.

Es un comienzo vago, pero creo que puede funcionar. De hecho, también podría convertir esto en un pequeño fragmento o biblioteca si tengo tiempo.

Pero en realidad, este debería ser un cliente generado estáticamente, no uno dinámico. Porque entonces es mucho más fácil validar y generar el código.

Patio de juegos

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda