GRPC e Android – Requisitos de alto desempeño con Kotlin | Newton | Octubre 2021
Grpcéum framework mantido pela Google, para manipulación de requisições do RPC (llamada a procedimiento remoto), um protocolo de rede voltado a eficiência para sistemas distribuídos.
Criado com base em HTTP / 2 promove a baixa latência suportando stream de dados bidirecional com compressão de dados, de modo simultâneo, diferente do HTTP / 1 no qual é aberto uma camada de rede TCP para cada requisição, no há compressão, o encabezado é semper enviado en texto plano. Com o grpc é possível ejecutar funções de leitura e escrita de dados simultâneamente inclusive em modo de streaming no qual a passem de informação é constante e encriptada
Tanto na aplicação cliente quanto no server é needário que contenha o Contraste que vai ditar as regras da requisição carbono os «endpoints», o que é esperado para ser recebido eo que deve ser retornado, e qual é a forma de retorno, essas regras são explícitas no arquivo .proto
de cada parte de la aplicación seja servidor ou cliente
abaixo um exemplo de arquivo .proto
que apenas tem um metodo de requisição para criar um usuário na API:
- Como descrito acima, o arquivo de protocolo, édependente de qualquer linguagem, não importa se o desenvolvedor trabalha com Interfaz em JavaScript o com Java / GO No parte trasera, ou em Kotlin / Flutter para o Móvil, Akivo
.proto
seráo mesmo. - Flexibilidade em manutenção de API com arquivos de contrato é outro ponto vantajoso para a comunicação, com as requisições tendo um contrato explícito é muito mais saudável gerenciar mudanças.
- O trafego é realizado em binário o que gera uma eficienciarelacionadamente maior tanto na velocidade da requisição quanto na serialização e deserialização dos dados trafegados. Independente da linguagem a serialização e deserialização é a mesma
- TLS ao invés de SSL, as requisições grpc podem trabalhar com TLS (Transport Layer Security) o protocolo de segurança de rede que encripta Toda a requisição, independent de ser
Header
EuropaBody
, Uh ataque de intermediario em que seja capturado o Simbólico, não irá surtir efeito sem o arquivo proto em mãos por causa da criptografia, e até opresente momento não há registro de quebra da TLS
Antes de la implementación aconselho realizar o descargar la API para que una implementación possa ser testada, pode se obter o Código de github ou simplesmente baixar e rodar o arquivo .Poder
Primeiro de tudo é necesario realizado como dependências
No Akivo build.gradle
Realice aplicaciones de módulo
Agora com as Dependências declaradas é necessário incluir o plugin do protobuf
plugins
// ...
id 'com.google.protobuf'
Ainda nesse mesmo arquivo, finalmente basta adicionar as configurações do protobuf
No exemplo deste artigo seráimplementado uma requisição para criar / salvar um usuário na API, um método com o nome Crear usuario que receberá um Solicitud del usuario e retornará da api um Respuesta de la API
- Primeiramente, mude a visualização no Android Studio de Androide Derecha proyecto
- Em seguida crie um diretório chamado prototipo em nível dentro de la pasta básica
- Dentro del diretório proto crie um arquivo chamado
contract.proto
no qual .proto é a extensão, na verdade o nome do arquivo não precisa ser contract, pode ser o que desejar, atualmente está contrato apenas para questões didáticas - Ao tentar inserir um arquivo
.proto
No Android Studio pode ser que ele não entenda extensão e seja needário baixar o pluginProtobuf
EuropaProtocol Buffers
Grande Jet cerebro - Finalmente adicione ao arquivo Contract.proto, as seguintes informações que se adequam ao nosso exeplo de requisição a ser criado
- Por fim, sin Android Studio clique em Build> Clean Project y depois Build> Rebuild Project este build irá gerar as Classes necessárias com base nas informações do arquivo .proto criado
Para fazer as requisições, primeiro criamos um Channel
, um canal no qual vai acontecer as transferências de dados, seguido por um Stub
que contém nossos «Punto final«a serem consumidos, porém lembramos que nosso método precisa de um UserRequest
respuesta APIResponse
Logotipo, representado por também criaremos.
Para simplificação da implementação por questões didáticas, todo o código abaixo foi escrito dentro del método onCreate
da MainActivity, e ficariam dessa forma:
Perceba no código acima na primeira linha que está sendo passado os valores:
- «Seu IP» -local alternativo pelo ip da sua máquina
- 50052 – que é a porta que está sendo usado nesse exemplo, a API que foi disponibilizada para teste está usando esta mesma porta, se houver needidade fique a vontade para alterar
Com a API rodando, agora é só ejecutar
Set tudo ocorreu bem, no seu Log pareceu a palavra Success
Depois de fazer uma requisição de um objeto, você pode pensar legal, porém, mais Legal contract.proto
Perceba que foi adicionado o método getUsers e em seu retorno antes de Respuesta del usuario Para adicionar un flujo de información es para diz que este método retonará um transmisión de datos, e na implementación podemos asimilar:
API utilizada para teste envirá um usuário a cada segundo isso porque em seu código foi especificó dessa forma, para melhor visualização do recebimento dos usuários no Log, agora a cada 1 segundo parecer no os send, usuários Coroutine Gobierno militar fluir, para uma requisição no qual se recebe as informações
Navidad promesa, aconselho fortemente a continuarinvestigando sobre este modelo de requição, infelizmente não pude concentrar tudo neste mesmo artigo pois iria ficar longo, más aprender como é realizado a serialização, deserialização de requisição
gRPC
Comparación de rendimiento HTTP / 2 y HTTP / 1.1
https://developer.android.com/guide/topics/connectivity/grpc