Thursday, January 21, 2016

É POSSÍVEL UMA APLICAÇÃO WEB ATUALIZAR UMA BASE DE DADOS NO SERVIDOR USANDO JAVA SCRIPT

“É POSSÍVEL UMA APLICAÇÃO WEB ATUALIZAR UMA BASE DE DADOS NO SERVIDOR USANDO JAVA SCRIPT?”
por Pedro Francisco Pereira,
agradecimentos especiais a Humberto Moura e Julien Nascimento.

Sim... e não!

Se você não sabe a resposta a esta pergunta, não se sinta envergonhado.  Eu lancei esta questão na minha rede no Facebook – que inclui desenvolvedores experientes – e de todas as respostas que obtive, só uma indicava o caminho correto.
Até mesmo discussões sobre este tema no Stack Overflow indicavam que “você precisa de uma linguagem server side como PHP, Ruby, Python, ...”. 

Curioso?  Bom, então vou logo dizendo que a resposta a “É possível uma aplicação Web atualizar uma base de dados no servidor usando Java Script?” é “sim”... e “não”! J
“Sim” porque é possível usar Java Script para acessar bases de dados em um servidor. 
E “não” porque não se pode fazer isso usando o mesmo código que roda no cliente.

Quando “parece” que o Java Script no Cliente está acessando um banco de dados no Servidor

Há pelo menos uma “gambiarra” que pode ser feita quando se está usando um ambiente Microsoft – Windows e Internet Explorer:  instanciar controles ActiveX no Java Script cliente para conectar a um banco de dados no servidor.
Exemplo de código encontrado no Stack Overflow
 (em http://pt.stackoverflow.com/questions/29549/obter-conex%C3%A3o-com-banco-de-dados-em-html-e-js , créditos ao meu amigo Humberto Moura por encontrar essa thread!  Valeu, Humberto!)
var connection = new ActiveXObject("ADODB.Connection") ;
var connectionstring="Data Source=<server>;Initial Catalog=<catalog>;User ID=<user>;Password=<password>;Provider=SQLOLEDB";
connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");
rs.Open("SELECT * FROM table", connection);
rs.MoveFirst
while(!rs.eof)
{
   document.write(rs.fields(1));
   rs.movenext;
}
rs.close;
connection.close;
 Esta solução é técnicamente pobre, uma vez que exige um sistema operacional e um browser específicos[1].
Em têrmos de segurança,  é uma completa loucura, uma vez que o usuário e senha do banco de dados estarão visíveis no script!
Mas o pior, em relação à nossa pergunta, é que não é o Java Script que estará acessando a base de dados no servidor, é o controle ActiveX!
Vale como curiosidade, como solução real... vamos descartá-la!

É o browser que interpreta o código Java Script nas Web Pages? 
(Muito prazer, sou o Java Script Engine!)

Bom, eu não sei pra vocês, mas pra mim quando eu falo “Java Script” eu penso imediatamente no código que é executado quando o usuário interage com controles em uma Web Page – quando clica um botão, quando seleciona um controle, etc.
E qual é o software que “executa” as Web Pages?  Ora, o browser, é claro!  É ele quem exibe o HTML, aplica a formatação definida nos CSS, e executa o código Java Script[2].

Mas será realmente “o browser”?  Serão os browsers construídos de uma forma monolítica?  Terão os arquitetos dos browsers desprezado os princípios de “alta coesão” e “baixo acoplamento”?  Basta que a pergunta nos ocorra para que saibamos que não!  O funcionamento do browser certamente é implementado em componentes – e estes componentes devem ser reutilizáveis, de acordo com as normas fundamentais da Engenharia de Software!
Na verdade eu, pessoalmente, já sabia disto, pois estava a par de que as Metro Apps do Windows 8 e dos tablets Microsoft são construídas usando Java Script[3] – e rodam num “desktop” e não em um browser!   Eu apenas não estava usando a informação no contexto desta pergunta!  Certamente a Microsoft não iria “reinventar a roda” para fazer suas aplicações desktop baseadas em Java Script funcionar[4]!

O componente dos browsers que executa o código Java Script é o Java Script Engine.  Diferentes browsers tem diferentes engines[5]:  SpiderMonkey é o do Firefox; V8 é o do Chrome; JavaScriptCore é o do Safari; Chakra é o do IE...

 E se o Java Script Engine é um componente independente do browser e reutilizável... não poderia ser uado em um servidor?  Certamente que sim! 

Java Script no Cliente... e Java Script no Servidor!

Esta é a resposta à nossa pergunta “É possível uma aplicação eb atualizar uma base de dados no servidor usando Java Script”!  Sim, é a resposta – com a ressalva de que o acesso a banco de dados não está no Java Script que vai para a máquina cliente, no Java Script que faz a web páge “funcionar”, e sim em um Java Script no lado servidor, gerenciado por uma outra instância do Java Script Engine!


“Hi, I’m a Node of Mean Software!” J

E assim chegamos a frameworks para construir aplicações Web usando Java Script tanto no lado cliente quanto no lado servidor!

Node.js é um destes frameworks – obrigado, Julien Nascimento,  por me colocar no rumo certo!
Node.js é open source e multi-plataforma, e é suportado pela Node.js Foundation, um projeto colaborativo da Linux Foundation.
Mais detalhes podem ser encontrados na Wikipedia em https://en.wikipedia.org/wiki/Node.js .

Mean ( https://en.wikipedia.org/wiki/MEAN_(software_bundle) ) é um software stack (conjunto de components que criam uma plataforma completa) baseado em Node.js, Angular.js, Express.js e Mongo.DB.  Citando literalmente a Wikipedia “because all components of the MEAN stack support programs written in Java Script, MEAN applications can be written in one language for both server-side and client-side execution environments”.

QED!  J

Observação - Mongo.DB

Mongo.DB é um banco de dados orientado a documentos semelhantes a JSON, com esquemas dinâmicos – portanto, um banco de dados “não-SQL”.
Se quiser saber mais sobre banco de dados não-SQL e Big Data, talvez ache interessante este pequeno artigo que escrevi para o meu blog da Kansas State University ( http://www.k-state.edu/ ):





[2] E, não custa lembrar aos experientes, e sempre deve ser salientado aos iniciantes – tudo que chega a uma máquina cliente que está acessando uma página Web é HTML, CSS e Java Script!  Código ASP “clássico”, PHP, C#, Java – nada disto chega ao cliente, e nem teria sentido chegar, pois o browser não conseguiria lidar com nada disto.  ASP, PHP, C#, Java, etc, são processados pelo servidor Web, e o resultado deste processamento é HTML, CSS e Java Script que são então enviados à maquina cliente e interpretados pelo browser.
[4] Mais informações sobre a utilização do mesmo Java Script Engine no IE e no Windows podem ser encontradas em “Microsoft Details Hosting Chakra Javascript Engine Across Various Apps Supported On Windows 10” ( http://microsoft-news.com/microsoft-details-hosting-chakra-javascript-engine-across-various-apps-supported-on-windows-10/ )
[5] Mais informações sobre Java Script Engines podem ser encontradas na Wikipedia em https://en.wikipedia.org/wiki/JavaScript_engine .

No comments: