Siguiendo con gRPC ,en este artículo vamos a plantear un entorno tecnologíco alternativo a la aplicación creada en el artículo gRPC. El presente y futuro de los APIs  .El código fuente está disponible aquí.

Vamos a trabajar con el IDE IntelliJ IDEA 2018.3.5 y con graddle planteando, por lo tanto, una alternativa a Eclipse y Maven.

En la imagen previa observamos el look and feel de IntelliJ,la estructura del proyecto (que ya conocemos) y en primer plano el blockchain.proto, también conocido y que supone el punto de partida , como siempre , en arquitecturas gRPC. En la raiz del proyecto se encuentra el archivo build.gradle el equivalente al pom.xml de maven y por lo tanto donde se define todo lo necesario para la construcción. A continuación vamos a proceder a su analisis.

Aunque la primera impresión refleje gran diferencia, debido a estar escrito en groovy en vez de en xml, si observamos con detalle vemos que existe bastante equivalencia y que hace uso de maven internamente.

Por ejemplo

‘org.springframework.boot:spring-boot-gradle-plugin:2.1.0.RELEASE’

es equivalente a
     <plugin>
         <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.1.0.RELEASE</version>
     </plugin>

Y

group: ‘io.github.lognet’,name: ‘grpc-spring-boot-starter’,version: ‘3.0.0’
es equivalente a
    <dependency>
        <groupId>io.github.lognet</groupId>
        <artifactId>grpc-spring-boot-starter</artifactId>
        <version>${grpc-spring-boot-starter.version}</version>
    </dependency>

De esta forma a partir de un pom.xml se puede construir un build.gradle y viceversa sin más que conocer las equivalencias sintácticas. 

A continuación de esta introducción de gradle analicemos el build.gradle de nuestro proyecto.

En primer lugar es necesario indicar el «groupId» y la versión del proyecto además de los plugin’s principales.

  • apply plugin: «java»  –> Indicamos que el lenguaje es java
  • apply plugin: «com.google.protobuf» –> INdicamos que se trata de una aplicación gRPC con protocol buffer
  • apply plugin; «idea»  –> Indicamos que el entrono es IntelliJ

En el buildscript indicamos los plugins y sus versiones de protobuf y de springboot y el repositorio donde encontrarlos,maven en este caso.

Indicamos las dependencias necesarias para nuestro proyecto (GRPC,Spring,Mongo,Junit…) y el repositorio donde debe buscarlas.

Por último, establecemos la información de protocol buffer necesaria para la generación automática del código a partir del proto (en nuestro caso será java, pero podría ser Go,python o cualquiera de los permitidos por proto3). La versión del compilador protoc ,el plugin grpc, la regla para las tareas de construcción(veremos a continuación) y la ruta de ubucación de las clases java generadas automáticamente

Pues una vez que tenemos definido como construir el proyecto vamos a proceder a generar las clases java a partir de la información del proto. De todas las tareas posibles que tenemos en la pestaña Gradle nos bastaria con ejecutar «generateProto» pero vamos a ejecutar la tarea «build» que realiza una construcción completa incluyendola como subtarea, entre otras.

Una vez finalizada la construcción (podemos ver, en la parte derecha las tareas realizadas) ya tenemos generadas nuestras clases java con la infraestructura gRPC necesaria que nos a permitrir realizar la comunicación cliente-servidor.Otro resultante de la construcción es un jar con la aplicación versionado tal y como le indicamos en el build.gradle

Ya tenemos una aplicación completamente equivalente a la que construimos en el artículo gRPC. El presente y futuro de los APIs  y en un entorno tecnológico alternativo.Lo que nos queda es ver si funciona.

El resultado es el esperado…hemos generado y añadido un nuevo bloque a nuestra cadena de bloques privada.

Pues a modo de conclusión tanto en este artículo como en el previo

hemos cubierto un amplio espectro en relación a las opciones de arquitecturización y desarrollo de aplicaciones gRPC, tanto en su modo de construcción como en el entorno de trabajo. Queda pendiente para próximos artículos la inclusión de elmentos interesantes como los lenguajes Go y python y clientes concurrentes en diferentes lenguajes.