Conecte um dispositivo móvel ao banco de dados sem escrever o código do servidor

Olá Habr! Quero compartilhar minha experiência usando a plataforma móvel Foresight .

Se você tem a tarefa de armazenar dados remotamente sem gravar seu próprio servidor, a primeira coisa que vem à mente é a ferramenta Firebase Realtime Database . A maioria dos leitores sabe o que está em jogo, mas vou explicar o resto. Usando o Firebase Database, você pode armazenar dados remotamente no formato NoSql.


Imagem do firebase


Das vantagens de usar:

  • suportado pelo google
  • não é necessário escrever nenhum código, no lado da base
  • trabalho rápido
  • grátis até 5 GB
  • integração com o serviço de autenticação Firebase com um número bastante grande de provedores de autorização
  • suporte para android, iOs, unidade etc.
  • sincronizados em tempo real: ao atualizar dados no banco de dados, eles são atualizados no cliente

Dos menos:

  • ao exceder os limites estabelecidos para espaço e carga do servidor, você deve pagar
  • não há como personalizar a estrutura de armazenamento

FMP + PostgreSQL


Agora, quero falar sobre uma ferramenta alternativa que tenho que usar.

Eu vou de longe. Em algum lugar, tenho um servidor PostreSQL elevado com um banco de dados. No banco de dados, eu tenho uma tabela com frutas:



O que é o PostreSQL como trabalhar com ele pode ser lido aqui .

Minha tarefa é colocar essa tabela no telefone o mais rápido possível com o mínimo de código escrito e garantir a segurança em todas as etapas.

Aqui está a tabela my_table_fruits em pgAdmin4 :



Em seguida, encontro os procedimentos na árvore pgAdmin4. Estou escrevendo meu próprio procedimento para obter a tabela:



O procedimento será chamado fruits_get_by_color e me dará frutos de uma determinada cor da minha tabela my_table_fruits.

Depois disso, mudo para o servidor Foresight da plataforma móvel (a seguir FMF). Como implantar a plataforma e o que você precisa pode ser encontrado na documentação . FMF é um servidor que possui conectores para servidores de banco de dados. Também pode se conectar ao PostgreSQL de que precisamos. Não há necessidade de escrever código para isso. Eu tenho que trabalhar com o painel de administração através do navegador. Digite os endereços necessários de servidores, bancos de dados. O painel do administrador possui configurações e uma árvore de ambiente:



Você também pode ler mais sobre as configurações na documentação.

Infelizmente, o FMF não possui versões de teste ou períodos livres. Além disso, o FMF é implantado em uma infraestrutura segura do cliente. Portanto, não posso fornecer links para o servidor para tentar. Mas, para entender a essência do trabalho, as seguintes informações são suficientes.

Crio um novo ambiente na árvore do ambiente, por exemplo, chamarei Leonid_environment. Dentro do ambiente, crio um projeto, por exemplo, Leonid_project. Entro no projeto e crio uma fonte de dados lá, no nosso caso, o PostgreSQL. Entro os parâmetros do servidor e do banco de dados nos quais minha tabela está armazenada:



Entro na fonte de dados e clico em "Importar". Entro no nome da fonte o nome do procedimento que introduzi no PostgreSQL, neste caso fruits_get_by_color. Para o cliente móvel, você pode criar um nome diferente, embora não necessariamente. Vou chamá-lo de fruits_get_by_color_for_android:



Depois de clicar no botão "Importar", a plataforma FMF "verá" nosso procedimento e os parâmetros que devemos transferir para lá.



Em particular, ela verá que devemos passar o parâmetro fruit_color:



Depois disso, vá para a guia "Usuários da API" e crie um usuário. Criou um usuário com um nome de usuário e senha Leonid 123123:



A partir deste momento, você pode acessar o Android Studio para obter esses dados em seu telefone celular.

Fmp + android


Estou criando um novo projeto. Juntamente com a plataforma, é distribuída uma estrutura para trabalhar com ela. Puxe a estrutura para o projeto Arquivo → módulo de importação → * .aar



No projeto, declaro um número de constantes nas quais insiro o endereço do servidor, bem como o nome do ambiente que inventei, o nome do projeto, o login, a senha e o nome do recurso do FMP:

private static final String MY_URL = "http://mobilefmp.dev.fs.world"; private static final VersionAPI MY_VERSION_API = VersionAPI.V_1; private static final String MY_ENVIRONMENT = "Leonid_environment"; private static final String MY_PROJECT = "Leonid_project"; private static final String MY_VERSION = "v1"; private static final String MY_LOGIN = "Leonid"; private static final String MY_PASSWORD = "123123"; private static final String MY_RESOURCE = "fruits_get_by_color_for_android"; 

Observe que estamos nos referindo especificamente ao FMP, e não diretamente ao PostgreSQL. Em seguida, crie um objeto HyperHive e preencha as variáveis ​​declaradas:

 hyperHive = new HyperHiveState(getApplicationContext()) .setHostWithSchema(MY_URL) .setApiVersion(MY_VERSION_API) .setEnvironmentSlug(MY_ENVIRONMENT) .setProjectSlug(MY_PROJECT) .setVersionProject(MY_VERSION) .buildHyperHive(); 

Então você precisa executar a autorização. Para fazer isso, passe o nome de usuário e a senha para o método auth ():

 boolean status = hyperHive.authAPI.auth(MY_LOGIN, MY_PASSWORD, true).execute().isOk(); 

Quando verdadeiro, você pode consultar o conteúdo da tabela, o que faremos. No objeto tableStreamCallParams, passamos o parâmetro fruit_color no formato json e inserimos o valor amarelo para ele. Deixe-me lembrá-lo de que criamos uma tabela de frutas e criamos um procedimento no PostreSQL que usa um parâmetro de cor como entrada. Isso foi necessário para inserir este parâmetro no dispositivo:

  TableStreamCallParams tableStreamCallParams = new TableStreamCallParams(); String data = "{\"fruit_color\": \"yellow\"}"; tableStreamCallParams.setData(data); String status = hyperHive.requestAPI.tableStream(MY_RESOURCE, tableStreamCallParams).execute(); 

Após a solicitação, passamos ao servidor FMP. O servidor FMP acessa o servidor PostgreSQL. Como resultado, devemos obter uma lista de frutas amarelas:



Strings são transmitidas para o banco de dados SQLite. Nesse caso, as cores amarelo eram apenas banana e limão. A velocidade de download de dados em cache no lado do FMF é de aproximadamente 10.000 linhas por segundo na velocidade normal da Internet.

Todas as etapas que descrevi podem ser lidas na documentação . Também há informações sobre a conexão com iOs e outros sistemas operacionais.

Eu dou o código de ativação completo .

Fiz uma solicitação do thread principal e não processei erros para reduzir a quantidade de código.

FMP funcional


A funcionalidade FMF não se limita a isso. Você pode criar um procedimento no lado do servidor do banco de dados não apenas para receber, mas também para criar novas linhas, dependendo dos valores passados. Você pode passar matrizes de valores. As limitações estão apenas dentro do próprio banco de dados.

Vou passar por amplas etapas na principal funcionalidade do FMP:

  • cache de dados no lado da plataforma e recebimento de um delta (não a tabela inteira, mas apenas as linhas alteradas)
  • ações do usuário de log
  • controle de acesso por usuário, grupo de usuários, ID do dispositivo
  • autenticação através do LDAP
  • integração com SMTP, Citrix XenMobile, Sentry
  • assinatura de dados na autoridade de certificação CryptoPro
  • armazenamento de arquivos não é o lado do FMF
  • banco de dados local no lado do FMP (você não pode se conectar a um banco de dados de terceiros, mas criar um banco de dados localmente, como no Firebase)
  • Conectores para Firebase Cloud Messaging, Apple Push Notification e Windows Push Notification. Crie listas de endereçamento e modelos de notificação por push

Existem estruturas para:

  • andróide
  • ios
  • UWP
  • WinCE
  • Veleiro, Aurora (veleiro russo)

Existem conectores para:


Prós e contras do FMP


Vou dar os prós e contras que vejo do meu ponto de vista. Dependendo das especificidades e tamanho do projeto, acho que você não concorda com tudo.

Prós:

  • sem escrever o código do servidor, você pode se conectar ao servidor de banco de dados
  • um grande número de conectores para outras fontes
  • a presença de estruturas para a maioria dos sistemas operacionais móveis
  • Serviço de suporte de língua russa

Contras:

  • custo
  • orientação comercial para o cliente
  • nenhum período de teste gratuito

Conclusões


A comparação da plataforma FMF com o Firebase Realtime Database foi "rebuscada", como Eu queria pelo menos comparar algo com os desenvolvedores familiares de Android e iOS. De fato, o PMF tem uma funcionalidade e finalidade ligeiramente diferentes. Entre os concorrentes estão o SAP Mobile Platform, a primeira plataforma móvel da IBM, o Optimum CDC.

Concluindo, quero dizer que vale a pena prestar atenção ao FMF se você tiver:

  • cliente bastante grande disposto a pagar pelo sistema
  • quem não deseja gravar uma camada entre o dispositivo móvel e o servidor de banco de dados
  • que possui uma grande quantidade de dados, como um armazém de mercadorias
  • para a qual o uso do software russo é fundamental
  • para a qual a proteção de dados desempenha um papel importante

Source: https://habr.com/ru/post/pt463437/


All Articles