Google Apps Script

Google Apps Script
source: developers.google.com

 Google Apps Script

 Cuidado!

Você pode acabar tendo problemas se seu projeto:

  • Manipular um volume MUITO grande de informações
  • Exigir processamento muito pesado/longo
  • Exigir processamento transacional
  • Tiver complexidade muito alta

Como tirar proveito da facilidade e simplicidade do Apps Script e, ainda assim, lidar com estes problemas?

Um alternativa: Google App Engine

  • Setup super simples
  • Linguagens Java, Python, PHP e Go (Dart??)
  • Serviços poderosos (Users, Search, Task Queue, Memcache etc)
  • Múltiplas opções de storage (Cloud SQL, NoSQL Datastore, Cloud Storage)
  • Possibilita uso em conjunto com Compute Engine para rodar sua VM preferida
  • Escalável - até 7 bilhões de requests/dia

 Google Cloud Endpoints

Endpoints
source: developers.google.com

 Google Cloud Endpoints - Vantagens

  • Mesma infraestrutura que o Google utiliza em suas API's
  • Autenticação via OAuth2
  • Versionamento da API
  • Geração de código para clientes
  • REST Console

Porque não um cliente Apps Script!?

Endpoints

Porém...

Como utilizar seus serviços nos scripts, tendo que lidar com:

  • Fluxo de autenticação OAuth2
  • Montagens das chamadas REST
  • Parsers
  • Cache
  • Cursores

Idéia:

    Assim como MailApp, SpreadsheetApp, DocumentApp etc, você pode criar seu próprio:

    ServiceXxxApp

ServiceXxxApp

ServiceApp

 OAuth2 - Storing tokens


        function storeTokens(refresh, access) {

          // Use UserProperties to safely store tokens
          var userProperties = PropertiesService.getUserProperties();

          var tokens = {refreshToken: refresh, accessToken: access};
          userProperties.setProperties(tokens);
        }
    

 OAuth2 - Calling API


        function callAPI() {
          //Gets token from UserProperties,
          //exchanging the refresh token by a fresh access token, if expired
          var accessToken = getAccessToken();
          var options = {method : "[ GET | POST | PUT | DELETE ]"}

          //Add access token to request header
          options.headers =  {Authorization: "Bearer " + accessToken};

          var apiURL = "https://[APP_ID].appspot.com/_ah/api/[API_NAME]/[VERSION]/[PATH]";
          var responseText = UrlFetchApp.fetch(apiURL, options).getContentText();
          return responseText;
        }
      

Poderia ser gerado automaticamente:

  • Fluxo de autenticação OAuth2
  • Montagens das chamadas REST
  • Parsers


Open source? Google?

Dicas

  • Se preciso, crie um modelo de objetos sobre o modelo de dados
  • Restrinja as funcionalidades somente ao acesso ao serviço
  • Versione o código (Git/Mercurial)
  • Teste TUDO - automático e contínuo

Case: bkper

HUB/Backbone contábil e financeiro para Google Apps

 Processamento contábil e financeiro

Apresenta quase todos problemas citados anteriormente:


  • Volume de informações: registros financeiros
  • Processamento pesado: saldos de contas / relatórios
  • Processamento transacional: partidas dobradas
  • Alta complexidade: permissões, validações, histórico etc

bkper Overview

bkper

Exemplos


Plano de exemplo



  • Web
  • Mobile
  • Email
  • Talk

 REST API Explorer

BkperApp

Complementos para Google Apps



  Google Docs Addon



  Google Sheets Addon



Desenvolvimento

Sua biblioteca como ferramenta para desenvolvedores

Exemplo

Fazer um lançamento com o BkperApp


       function recordATransaction() {

          var ledgerId = "agtzfmJrcGVyLWhyZHIOCxIGTGVkZ2VyGNKJAgw";

          var ledger = BkperApp.openLedgerById(ledgerId);

          ledger.record("#gas 63.23");

        }

     
Online example

Integração de todos componentes

  • Front End seu design favorito.
  • Google Apps Script sua logica de negocio.
  • Google Cloud Platform sua estabilidade & escalabilidade.
  • Exemplo:

Dúvidas?

questions
"A platform-less product will always be replaced by an equivalent platform-ized product"
Steve Yegge
Google