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
- Página principal de la documentación de gRPC
- Información sobre la autorización y autenticación
- GitHub: Definición de todos los protos
Ejemplo sobre C#
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-protosIncluye las librerías y ficheros necesarios en el fichero
*.csprojde 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.
Declara los clientes que quieras utilizar en la inyección de dependencias para más comodidad. En el fichero
Startup.csdonde 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
}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
}
}
}