Nos meus últimos blogs da
série em desenvolvimento da plataforma #XSA, escrevi alguns artigos sobre módulos de node, OData, entre outros conceitos. Hoje, quero aprofundar neste tema e compartilhar detalhes sobre como criar APIs REST. Este blog também pode ser lido em inglês
aqui
*Uma diferença neste blog em relação aos anteriores é que nos anteriores usei a versão SP03, no entanto, neste estou usando a versão SP04. Também adiciono que estou tentando evitar a ferramenta XS CLI, pois muitos administradores não concedem acesso a esse tipo de ferramenta em algumas empresas.
Desafio 1: habilitar o uso do serviço UAA para autenticar as solicitações no módulo de node JS.
Solução: é muito simples. Os passos iniciais foram documentados anteriormente, mas os incluirei aqui novamente.
- Garanta que o arquivo mta.yaml tenha suas dependências (html, db, node, uaa), refiro-me às seções requires/provides configuradas corretamente
- Verifique se o arquivo xs-app.json contém a autenticidade do tipo "route" e as rotas atuais
- Assumindo que ambos os módulos de compatibilidade XSJS e node js são suportados no módulo de node, prossiga e faça o bootstrap desses elementos no arquivo server.js
O arquivo server.js é a entrada principal (e por padrão é como é iniciado a partir do arquivo package.json)
- Em seguida, a partir do arquivo server.js, o router (módulo express) é chamado para analisar a solicitação e eventualmente passar a execução correspondente
- Observe que as rotas definidas no módulo ui em seu arquivo xs-app.json devem ser iguais às rotas definidas no arquivo index.js do módulo tipo node, caso contrário resultará em http 404 "Não encontrado"
Obrigado Lucia e Craig pelos exemplos, foram muito úteis e de grande ajuda.
- No folder (router), o arquivo index.js acima, também estamos importando um serviço chamado demoSvc.js (a implementação do serviço) onde executaremos o sql ou as stored procedures (assumindo que estas tenham sido criadas no módulo db e que o usuário tenha acesso correspondente para executar esses artefatos). Durante meus exercícios, criei uma tabela cds local, uma stored proc e inseri dados na tabela cds.
Uma vez que tudo isso estava em ordem, era apenas uma questão de inserir o código nodejs para executar sql ou carregar os procedimentos.
IMO Melhores práticas dizem que devemos executar a maior parte da lógica no BD (usando procedures), mas também quero ver como funciona a forma de executar SQL a partir do módulo node JS - foi muito fácil na minha opinião.
Se teve sorte e continua sem erros, vamos ver agora como chamar uma consulta SELECT.
- Observe que o objeto req (contém uma propriedade db que eventualmente é atribuída como client) e que é usada para executar nossa instrução sql
- A função prepare recebe uma instrução sql como primeiro argumento e um retorno de chamada para erros e instruções
- O err agora informa imediatamente se não temos permissões ou se há algum outro erro com nossa consulta
- O objeto statement nos permite executar nossa consulta como mostrado no ponto seguinte
- A função exec recebe um parâmetro inicial e um retorno de chamada, novamente, o retorno de chamada retorna um erro e os resultados (que ATM!!! Os dados, se algo retornar da consulta)
- Pode-se incluir lógica adicional para manipular a resposta antes de retorná-la à solicitação, ou no meu caso, retornar um objeto personalizado como resposta
- Por fim, o objeto res da resposta (da solicitação original) é configurado para
Este es el HTML mejorado y traducido al portugués.