BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Nimbus: Um novo framework para desenvolver aplicações serverless Java

Nimbus: Um novo framework para desenvolver aplicações serverless Java

O Nimbus é um framework Java que visa facilitar o desenvolvimento, testes e publicação de aplicações do tipo Function-as-a-Service(FaaS) no cloud. O Nimbus provê uma interface comum, cloud agnóstica, para interagir com os provedores de serverless.

Em um post recente no Medium, Thomas Allerton, autor do framework, declara que:

"Para iniciantes (em cloud) procurando construir aplicações simples, pode haver uma curva acentuada no aprendizado do dialeto usado no cloud, quando tudo que realmente se deseja é publicar alguns endpoints HTTP com algum lugar para guardar os dados". Como uma alternativa ao aprendizado da sintaxe de configuração cloud e APIs FaaS, o Nimbus faz o uso de annotations para suportar as diversas operações comuns de backend que são utilizadas quando se está construindo uma aplicação baseada em funções.

Allerton argumenta que a principal vantagem do Nimbus é não ter que criar um arquivo de configuração para declarar os recursos do cloud(como o AWS SAM ou o framework Serverless). Com isso, desenvolvedores "estão muito menos sujeitos a cometer erros ao esquecer parâmetros". Adicionalmente, o Nimbus faz a checagem dos parâmetros de deploy em tempo de compilação com o objetivo de detectar erros o mais cedo possível.

Para entender melhor como o framework é utilizado, considere o seguinte exemplo que utiliza a annotation @HttpServerlessFunction para criar uma API REST bem simples.

public class RestApi {

    @HttpServerlessFunction(path="getOsTypes", method= HttpMethod.GET)
    public List<String> currentOsTypes() {
           return Arrays.asList(new String[] {"Windows", "Mac", "Linux"});
    }
}

O Nimbus também suporta outras operações:

  • Função WebSocket para tratar requisições websocket;
  • Função Document Store para a execução de código iniciado por uma alteração em um banco de dados orientado a documentos;
  • Função Key-Value Store para a execução de código iniciado por uma alteração em um banco de dados chave-valor;
  • Função Notification para a execução de código iniciado por um evento de notificação em um tópico;
  • Função Queue para a execução de código iniciado por um novo item em um fila;
  • Função Basic para a execução de código que não necessita de um trigger;
  • Função File Storage para a execução de código iniciado por um evento no sistema de armazenamento de arquivos(seja uma criação ou exclusão);
  • Função After Deployment para executar operações que rodam apenas uma vez imediatamente após o deploy.

Além do suporte a diferentes tipos de operações, o Nimbus também vem com suporte a diferentes tipos de armazenamento de dados, caso uma aplicação serverless necessite algum tipo de persistência. O exemplo a seguir mostra como configurar um banco de dados orientado a documentos utilizando a annotation @DocumentStore.

@DocumentStore
public class OsPreference {

    @Key
    private String id;

    @Attribute
    private String preference;

    public OsPreference(String id, String preference) {
           this.id = id;
           this.preference = preference;
    }
    
    // ...
    // getters & setters
    // ...
}

Com o banco configurado, o DocumentStoreClient pode ser utilizado para persistir dados no mesmo.

private DocumentStoreClient<OsPreference> client =
   ClientBuilder.getDocumentStoreClient(OsPreference.class);

@HttpServerlessFunction(path="setOsPreference", method= HttpMethod.POST)
@UsesDocumentStore(OsPreference.class)
public String setOsPreference(OsPreference osPreference) {
   client.put(osPreference);
   return "Success";
}

O suporte a outros tipos de armazenamento de dados (e seus clientes) incluem: banco de dados relacional; banco de dados chave-valor; e armazenamento de arquivos (com o suporte explícito a hospedagem de websites estáticos e upload de arquivos)

Um outro desafio comum no desenvolvimento de aplicações serverless são os testes. O Nimbus fornece suporte explícito à testes unitários e testes de integração. O suporte à testes unitários tem a habilidade de criar um deploy local de mocks para qualquer operação listada acima, que podem aceitar requisições e verificar que as funções foram chamadas corretamente e que os dados foram armazenados apropriadamente. O suporte aos testes de integração é um pouco mais limitado do que o suporte aos testes unitários, e apenas suporta testes HTTP. Esses testes iniciam um servidor web local que pode ser utilizado para verificar se as requisições chamam as funções esperadas.

Atualmente, como parte do release inicial, apenas a AWS é suportada. Entretanto, o suporte a outros provedores cloud está planejado.

Para aprender mais sobre o Nimbus, leia o guia inicial, visite a documentação de referência ou faça o clone do código fonte no GitHub.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT