Skip to main content

gRPC

Los servidores exponen APIs gRPC. Esto significa que cualquier plataforma en la que se puedan generar los clientes adecuadamente se pueden beneficiar de estas ventajas: Node.JS, C#, Go, Java, Ruby, Kotlin, Android, ObjC, C++, Python, ... En los lenguajes correspondientes acompañará con tipos que definen toda la interacción con el sistema haciendo bastante segura la integración por tanto.

Integración

Esta es la vía de integración que recomendamos para cualquier integración externa. Es más eficiente, tipada y más fácil de integrar; las tres cosas proporcionadas simplemente por el hecho de usar gRPC sin ningún requerimiento adicional.

Funcionamiento general

El procedimiento consistiría en generar a partir de nuestras definiciones los ficheros automáticos con los clientes en el lenguaje que usemos (e.g. Java). A partir de ahí cada campo y llamada está documentada y podemos proceder a usarlos fácilmente en nuestro lenguaje preferido.

Recursos

Ejemplo sobre C#

  1. Importa los protos desde el repositorio mirror del código principal:

    git clone git@github.com:AZPool/apps-protos.git
    mv apps-protos/Protos .
    rm -rf apps-protos
  2. Incluye las librerías y ficheros necesarios en el fichero *.csproj de tu aplicación:

      <ItemGroup>
    <PackageReference Include="Grpc" Version="2.31.0" />
    <PackageReference Include="Grpc.AspNetCore" Version="2.27.0" />
    </ItemGroup>

    <ItemGroup>
    <Watch Include="..\Protos\**\*.proto" />
    </ItemGroup>

    Si tienes cualquier error en este paso puedes recurrir a la documentación oficial de gRPC donde tendrán descrito el método de instalación más actualizado y correcto.

  3. Declara los clientes que quieras utilizar en la inyección de dependencias para más comodidad. En el fichero Startup.cs donde corresponda según el tipo de aplicación:

    public void ConfigureServices(IServiceCollection services) {
    // ... other things

    services.AddGrpcClient<AZPool.WebInterna.Sociedades.SociedadesClient>(options =>
    {
    options.Address = new Uri("http://webinterna.api.dlege.altipla.consulting");
    });

    // ... other things
    }
  4. Inyecta en los handlers el cliente inicializado y podrás utilizarlo fácilmente llamando a sus métodos de forma asíncrona:

    public class Example {
    public Sociedades.SociedadesClient client;

    public AuthInterceptor(ILogger<AuthInterceptor> logger, Sociedades.SociedadesClient client)
    {
    this.logger = logger;
    this.client = client;
    }

    public async Task<Foo> Foo() {
    var result = client.List(new ListRequest()
    {
    FooField = "bar-field",
    });
    foreach (Sociedades.Sociedad sociedad in reply.Sociedades) {
    // ... do anything with the object
    }
    }
    }