Nos meus últimos blogs da série sobre #XSA, escrevi sobre a criação de módulos node js, expondo OData, entre outros conceitos. Hoje, gostaria de aprofundar esse tema e fornecer detalhes adicionais sobre a criação de APIs REST. O mesmo blog pode ser lido em espanhol
aqui.
*uma diferença dos meus blogs anteriores para agora é que eu estava usando SP03 antes, agora SP04. Além disso, eu estava tentando evitar o uso do XS CLI, pois sei que é um assunto delicado para os administradores que fornecem acesso ao Linux para os desenvolvedores na maioria das empresas.
Desafio 1: habilitar o serviço UAA para autenticar as solicitações no módulo node.
Solução: na verdade é muito simples. Os passos iniciais já estavam documentados, mas os incluirei aqui de qualquer forma.
- Garanta que o arquivo mta.yaml tenha as dependências do módulo (html, db, node, uaa), isso se refere à seção requires/provides e certifique-se de que estejam feitos corretamente
- Garanta que o arquivo xs-app.json contenha o tipo de autenticação "route" e as rotas reais
- Assumindo que tanto o suporte a XSJS quanto o suporte a node js estejam habilitados no módulo node, prossiga para inicializar esses elementos a partir do arquivo server.js
O arquivo server.js é o arquivo de entrada (conforme o passo de inicialização padrão no arquivo package.json)
- Em seguida, a partir do arquivo server.js, o roteador (módulo express) é chamado para analisar a solicitação e passá-la eventualmente para a execução da função correspondente.
- Observe que as rotas definidas no arquivo xs-app.json do módulo de UI DEVEM coincidir com as rotas definidas no arquivo index.js do roteador de node, caso contrário, você receberá respostas http 404 "Não encontrado"
Obrigado a Lucía e Craig por seus blogs
- No arquivo index.js da pasta de roteador, também estamos importando demoSvc.js (implementação do serviço) onde executaremos scripts SQL ou procedimentos armazenados (assumindo que esses já estão criados no módulo de banco de dados e temos as permissões adequadas para executá-los). Durante meu exercício, criei uma tabela cds local, um proc e adicionei alguns dados à minha tabela cds.
Uma vez alinhadas essas coisas, foi apenas uma questão de adicionar a lógica node js real para executar consultas ou procedimentos.
Na minha opinião, as melhores práticas seriam impulsionar mais no banco de dados (usando procedimentos) mas também estava curioso para ver como o método SQL era feito a partir de um módulo node, surpreendentemente fácil na minha opinião.
Em primeiro lugar, verifique se pode receber uma solicitação e responder corretamente. Eu uso solicitações/respostas json porque a maioria das aplicações web e APIs REST interagem dessa maneira.
Se tiver sucesso no passo anterior, então vamos chamar uma consulta SELECT.
- Observe como o objeto req (contém uma propriedade db que eventualmente é o cliente) e é usado para executar nossa declaração SQL
- A função preparar recebe uma declaração SQL como primeiro parâmetro e um callback que retorna erros e declarações
- O erro nos informaria imediatamente se não tivermos permissões ou se houver algum outro problema com nossa consulta
- O objeto de declaração nos permite executar