Criar Plugin de Aplicação com o STK CLI
Neste guia, você vai aprender a criar dois Plugins de Aplicação na StackSpot EDP utilizando o STK CLI. O exemplo prático envolve uma API em Python desenvolvida com o microframework Flask.
Visão Geral do Plugin de Aplicação
Criar um Plugin de Aplicação na StackSpot EDP significa desenvolver o código de uma Aplicação, ou parte dele, dentro da estrutura de Plugins de Aplicação da StackSpot. O Plugin pode representar tanto uma aplicação base minimamente funcional quanto um trecho de código que adiciona novas funcionalidades a uma Aplicação existente.
Ao estruturar seu código como Plugin, você facilita o reuso e o compartilhamento de soluções de forma padronizada e controlada em equipes ou organizações.
Na estrutura do Plugin de Aplicação, utilize os seguintes componentes:
- Documentação do Plugin: utilize a pasta
docspara fornecer informações sobre o uso do Plugin. A documentação pode ser escrita em português (pt-br) e inglês (en-us). - Código da Aplicação: insira todos os arquivos e códigos-fonte que compõem a Aplicação ou parte dela na pasta
templates. Esse conteúdo será gerado quando o Plugin for executado. - Casos de Teste: armazene cenários de teste do Plugin na pasta
tests. Isso é especialmente útil para Plugins com muitos inputs ou que geram múltiplos arquivos. - Configuração do Plugin: o arquivo
plugin.yamlcentraliza as configurações do Plugin, incluindo tipos de inputs, Hooks Declarativos e Connection Interfaces, tornando o Plugin mais dinâmico e inteligente.
Pré-requisitos e Permissões
Antes de começar, verifique se você possui acesso e permissão para criar ou utilizar um Studio na StackSpot EDP. Consulte os recursos a seguir para mais informações:
- Entenda o papel e permissões da sua conta
- Como utilizar um Studio
- Como criar um Studio
- Visibilidade do Studio
Etapa 1. Criar a Estrutura dos Plugins
-
Crie uma pasta para os Plugins e acesse-a pelo terminal:
mkdir Flask-APIcd Flask-API -
Execute o comando a seguir para iniciar a criação do Plugin
flask-api-plugine responda às perguntas sobre nome, tipo e outras configurações:stk create pluginnotaAs perguntas envolvem o preenchimento de metadados obrigatórios do Plugin, como nome, tipo, descrição e versão. Algumas perguntas permitem pré-configurar recursos, por exemplo, Connection Interfaces ou inicialização de repositório Git.
-
Execute novamente o comando para criar o Plugin
add-endpoint-to-flask-application:stk create pluginResponda aos prompts com as informações necessárias para o novo Plugin.
Etapa 2. Implementar o Código do Plugin flask-api-plugin
-
No diretório do Plugin
flask-api-plugin, acesse a pastatemplates. -
Crie o arquivo
main.pye insira o código de exemplo:main.pyfrom flask import Flask, jsonify, requestapp = Flask(__name__)# Sample datausers = [{"id": 1, "name": "John Doe"},{"id": 2, "name": "Jane Doe"}]@app.route('/')def home():return "Welcome to the Flask API!"@app.route('/api/users', methods=['GET'])def get_users():return jsonify(users)if __name__ == '__main__':app.run(debug=True)
Etapa 3. Adaptar o Código para Inputs Dinâmicos com Jinja
Agora, utilize expressões Jinja para tornar o código dinâmico, permitindo personalização via inputs do Plugin.
-
No arquivo
main.py, faça as seguintes substituições:- Substitua a lista
userspor{{ sample_data }} - Substitua a rota
'/api/users'por'/{{ subdirectory }}/{{ path }}' - Substitua o método
'GET'emmethods=[ ]por{{ method }} - Renomeie a função
def get_users()paradef {{ method | lower }}_{{ subdirectory }}():
- Substitua a lista
-
O código atualizado ficará assim:
main.pyfrom flask import Flask, jsonify, requestapp = Flask(__name__)# Sample datausers = {{ sample_data }}@app.route('/')def home():return "Welcome to the Flask API!"@app.route('/{{ subdirectory }}/{{ path }}', methods=['{{method}}'])def {{ method | lower }}_{{ subdirectory }}():return jsonify(users)if __name__ == '__main__':app.run(debug=True)
Etapa 4. Configurar o Arquivo plugin.yaml do Plugin flask-api-plugin
-
No arquivo
plugin.yaml, remova o bloco de inputs padrão. -
Insira o seguinte bloco de inputs, alinhando as variáveis com as expressões Jinja do passo anterior:
dicaOs nomes dos inputs são as variáveis utilizadas no código do Plugin com Jinja.
Inputs do plugin.yamlinputs:- label: Type the subdirectory of your URLname: subdirectorytype: textrequired: truedefault: userspattern: '([a-z]+)+'- label: Type the path of your URLname: pathtype: textrequired: truedefault: idpattern: '([a-z]+)+'- label: Sample Dataname: sample_datatype: listadd-question: Add one more user?input:label: User Sample datatype: objectinputs:- name: idtype: intlabel: User ID- name: user_nametype: textlabel: User Name- label: Choose the http method of the new endpointname: methodtype: selectitems:- GET- POST- PUT- DELETE- PATCHdefault: GETrequired: true
Etapa 5. Criar a Documentação do Plugin
Uma documentação clara e completa melhora a experiência de quem utiliza o Plugin. Siga o exemplo para iniciar a documentação do seu Plugin:
-
Na pasta
docs, selecione o idioma desejado e edite o arquivodocs.md. Inclua os requisitos do Plugin:docs.md## Nome do PluginDescreva de forma concisa o objetivo do seu Plugin.## Requisitos- Flask==3.0.3- jsonify==0.5- requests==2.32.3## UsoForneça instruções sobre como utilizar o Plugin, incluindo:- Parâmetros de entrada (inputs)- Métodos suportados- Recursos criados- Estrutura de arquivos do diretório do Plugin- Quaisquer dependências adicionais## Notas de LançamentoEsta seção é opcional e deve ser usada para registrar alterações ou melhorias em novas versões do Plugin.
Testar o Plugin (Recomendado)
Teste o comportamento do seu Plugin utilizando casos de teste. Para saber mais, consulte o Guia de Testes de Plugins.
Etapa 6. Implementar o Plugin add-endpoint-to-flask-application
Esse Plugin complementa o anterior, permitindo adicionar endpoints a Aplicações criadas com o flask-api-plugin, usando um Hook Declarativo.
-
No diretório do Plugin
add-endpoint-to-flask-application, crie a pastasnippets. -
Dentro de
snippets, crie o arquivoflask-endpoint.txtcom o seguinte conteúdo:flask-endpoint.txt@app.route('/{{ subdirectory }}/{{ path }}', methods=['{{method}}'])def {{ method | lower }}_{{ subdirectory }}():return jsonify(users)
Etapa 7. Configurar o Arquivo plugin.yaml do Plugin add-endpoint-to-flask-application
-
No arquivo
plugin.yaml, remova o bloco inicial de inputs. -
Insira o seguinte bloco, incluindo o Hook Declarativo para editar o arquivo
main.py:inputs:- label: Type the subdirectory of your URLname: subdirectorytype: textrequired: truedefault: userspattern: '([a-z]+)+'- label: Type the path of your URLname: pathtype: textrequired: truedefault: idpattern: '([a-z]+)+'- label: Choose the http method of the new endpointname: methodtype: selectitems:- GET- POST- PUT- DELETE- PATCHdefault: GETrequired: truehooks:- type: edittrigger: after-renderpath: main.pychanges:- search:string: "if __name__ == '__main__':"insert-before:snippet: snippets/flask-endpoint.txt
Etapa 8. Publicar os Plugins
Publicar um Plugin na StackSpot significa armazená-lo e disponibilizá-lo na plataforma. Para cada Plugin:
-
Certifique-se de estar autenticado na StackSpot. Execute:
stk login seu-email@stackspot.com -
No diretório do Plugin, execute:
stk publish plugin -
Selecione um Studio da sua conta e aguarde a conclusão da publicação.
Próximos Passos e Recursos Relacionados
Ao finalizar este guia, você terá criado um Plugin que gera uma API simples em Python usando Flask e outro Plugin que adiciona endpoints a Aplicações criadas com o primeiro Plugin.
Para aprofundar nos conceitos apresentados, consulte: