Questões frequentes sobre a Web API
Preparamos um conjunto de perguntas frequentes para desmistificar possíveis dúvidas sobre a Web API. A Web API é uma interface RESTful que permite a integração do ERP com outras aplicações e serviços. Expõe os recursos do ERP através de endpoints estruturados, facilitando operações como criação, leitura, atualização e eliminação de dados. A arquitetura da Web API inclui uma camada de integração responsável pela ligação ao ERP, que gere os pedidos de autenticação armazenando-os em cache com base no token gerado. A Web API expõe os métodos públicos do motor do ERP e invoca diretamente essa API, sem adicionar regras de negócio adicionais. Existem, no entanto, alguns métodos específicos da Web API, cuja lógica de negócio está espelhada no Controller da Web API. Por exemplo, o método CreateSalesDocument do controller das vendas. A autenticação na Web API utiliza o padrão OAuth 2.0. Os pedidos devem ser precedidos por uma chamada ao endpoint/token, fornecendo credenciais como o nome de utilizador, palavra-passe, código da empresa, instância do ERP, linha de produto e uma sessionkey. A resposta inclui um access_token que deve ser utilizado nos headers dos pedidos subsequentes. A sessionkey é um identificador obrigatório usado na autenticação da Web API do ERP. Quando não é fornecido um sessionKey no pedido de token, a Web API gera um sessionKey implícito que é associado ao token. Este identificador representa o contexto de integração da aplicação cliente com o ERP e permite ao sistema associar os pedidos a uma sessão específica, sem necessidade de manter sessões de utilizador na camada do servidor (IIS). Este sessionKey é a chave para que se possam realizar vários pedidos em simultâneo, mesmo com diferentes tokens, sem que exista o risco de diferentes threads acedam a informação que diz respeito a outro contexto de integração. Principais características Boas práticas Os endpoints seguem a estrutura: http://localhost:2018/WebApi/{modulo}/{entidade}/{servico}/ Na versão 2 da Web API, os endpoints incluem o prefixo v2, ou seja: http://localhost:2018/WebApi/v2/{modulo}/{entidade}/{servico}/ Legenda: O Swagger é uma ferramenta de documentação e invocação de métodos da Web API. A partir da versão 2 da Web API v10, o Swagger torna-se a página de apresentação da Web API, permitindo aos utilizadores explorar os módulos disponíveis, visualizar detalhes dos métodos e testar chamadas diretamente através da interface. A versão 2 da Web API introduz as seguintes melhorias em relação à versão anterior: Na versão 2, todas as respostas seguem a estrutura: { "Version": "string", "StatusCode": 0, "ErrorMessage": "string", "Results": {} } Esta uniformização facilita o tratamento das respostas por parte dos clientes, independentemente do método invocado. Quando o token expira, a Web API retorna o erro 401 – Unauthorized. Neste caso, deve ser realizado um novo pedido ao endpoint/token, utilizando o mesmo método do pedido inicial. Para reutilizar o mesmo contexto de integração, é recomendável incluir o token expirado no header Authorization do novo pedido. Sim. A Web API disponibiliza um endpoint de logout que permite libertar recursos associados a um determinado contexto de utilização. Este método é invocado sem parâmetros, mas requer a identificação do token no header Authorization do pedido. A utilização deste endpoint ajuda a libertar memória do processo do IIS e a remover sessões inativas na base de dados. Sim. Épossível efetuar chamadas simultâneas à Web API, mas com algumas restrições que dependem da configuração do servidor e do modo como a sessionkey é utilizada. Por predefinição: O comportamento é controlado pela opção < add key="BlockMultipleRequestsPerContext" value="true" / > , em que: A aplicação desta definição a false só deve ser utilizada se for garantido que as chamadas à Web API não utilizarão o BSO (motor do ERP) ou PSO (Plataforma). Por exemplo: invocação de endpoints de extensibilidade que têm uma camada própria de acesso a dados. Boas práticas Quando o access_token expira, o contexto de integração associado não é automaticamente libertado. Este comportamento permite que, mesmo quando um token expira, um novo pedido de token possa ser realizado (identificando no cabeçalho o token entretanto expirado) e, desta forma, reaproveitado o contexto de integração. Por omissão, o contexto de integração (definido pela sessionkey, empresa, instância e linha de produto) permanece ativo mesmo após a expiração do token. Tal significa que os recursos continuam alocados na aplicação (memória, sessões de utilizador e ligação ao ERP, incluindo as conexões à base de dados), podendo afetar o desempenho do servidor se não forem libertados manualmente. Para libertar os recursos corretamente, é necessário: POST /WebApi/Base/Logout Authorization: Bearer {access_token} Nota: a não libertação do contexto pode deixar sessões presas na base de dados do ERP e manter objetos em memória no IIS. Isto é especialmente relevante em sistemas com elevada carga ou múltiplas integrações. Boas práticas O access_token obtido através da autenticação OAuth 2.0 na Web API v10 tem, por predefinição, um tempo de expiração de 20 minutos. Este tempo pode ser definido no ficheiro Web.config no AppSetting TokenExpirationMinutes. Se desativar a opção BlockMultipleRequestsPerContext no ficheiro web.config, a Web API deixa de impedir que sejam efetuadas chamadas simultâneas com o mesmo token e a mesma sessionkey. Ao desativar esta opção, existem diversos riscos: É recomendável: Sim. É totalmente possível ter mais do que uma instância da Web API v10, tanto no mesmo servidor IIS como em vários servidores diferentes. No mesmo IIS: Em múltiplos servidores IIS: Boas práticas Sim. A Web API v10 utiliza o NLog como mecanismo de logging para registar atividades, erros e eventos internos. Estes logs são essenciais para o diagnóstico de problemas e análise de comportamento da API. Por predefinição, os logs são gravados na pasta Apl\WebAPI. Nos logs, são registados: O nível de verbosidade dos logs e os targets pode ser ajustado no ficheiro web.config, na secção de logging. Pode definir níveis como: Boas práticasPerguntas Frequentes
1. O que é a Web API do ERP?
2. Como é estruturada a arquitetura da Web API?
3. Como funciona o processo de autenticação na Web API?
4. O que é a sessionkey e qual a sua importância na Web API?
5. Qual é a estrutura dos endpoints da Web API?
6. O que é o Swagger e como é utilizado na Web API?
7. Quais são as principais novidades da versão 2 da Web API?
8. Como é estruturada a resposta dos pedidos na versão 2?
9. Como proceder quando o token de autenticação expira?
10. Existe um método para efetuar logout e libertar recursos?
11. É possível efetuar chamadas simultâneas à Web API?
12. O que acontece ao contexto de integração quando o token expira?
13. O que acontece se desativar a opção BlockMultipleRequestsPerContext e fizer pedidos simultâneos com o mesmo token e sessionkey?
14. É possível ter mais do que uma instância da Web API v10 no IIS? E em múltiplos servidores IIS?
15. A Web API v10 gera logs? Onde posso consultá-los e configurar?