Com o 4D 21 R4, ganha ainda mais controlo sobre os recursos do seu servidor REST, graças a um novo mecanismo de gestão de quotas.À medida que as suas aplicações crescem, os seus dados podem ser consumidos por uma grande variedade de clientes: aplicações web, aplicações móveis, serviços de terceiros, integrações personalizadas e, agora, até mesmo ferramentas baseadas em IA através de servidores MCP.
Cada cliente interage com as suas APIs REST à sua maneira, gerando pedidos com diferentes níveis de complexidade e frequência.Para garantir um desempenho ideal em todas as situações, é importante manter o controlo sobre a forma como os recursos do servidor são utilizados.
Quotas, porquê?
No servidor REST da 4D, os dados solicitados podem ser armazenados na memória como conjuntos de entidades para melhorar a eficiência e a navegação.
Em aplicações bem concebidas, estes conjuntos de entidades são libertados quando já não são necessários. No entanto, em ecossistemas grandes e diversificados, nem sempre é possível prever como os clientes se comportarão ou se todos os recursos atribuídos serão devidamente libertados.
Sem quotas, a gestão ineficiente de conjuntos de entidades numa única sessão pode afetar o desempenho percebido por outros utilizadores.
É por isso que o 4D 21 R4 introduz quotas de sessão para conjuntos de entidades. Com apenas algumas linhas de código, pode definir limites de recursos que ajudam a manter a utilização da memória sob controlo, a proteger o seu servidor contra um consumo excessivo e a garantir uma disponibilidade consistente para todos os utilizadores.
O resultado é um servidor REST mais resiliente, uma administração mais fácil e maior confiança ao expor os seus dados a um número cada vez maior de consumidores.
Configurar quotas para a sessão REST atual
O comando Session devolve um objeto que representa a sessão REST. Este objeto inclui uma quotas propriedade de objeto (uma instância da classe ` 4D.QuotaManager `).
Exemplo
Eis o objeto ` Session.quotas .
{
"nbEntitySets": 100,
"maxEntitySetTimeout": 420,
"defaultEntitySetTimeout": 300,
"currentValues": {}
}
Este expõe as seguintes propriedades, que podem ser utilizadas para configurar quotas para a sessão atual:
– nbEntitySets: o número máximo permitido de conjuntos de entidades na memória
–> Um número excessivo de conjuntos de entidades pode consumir demasiada memória e afetar o desempenho do servidor REST. Esta propriedade permite-lhe limitar o número de conjuntos de entidades que podem ser armazenados simultaneamente na memória para a sessão atual.
– defaultEntitySetTimeout: o tempo de espera de inatividade predefinido permitido para conjuntos de entidades.
–> Ajustar esta propriedade ajuda a evitar o uso excessivo de memória, uma vez que os conjuntos de entidades são automaticamente libertados quando permanecem sem utilização durante um período superior ao especificado.
– maxEntitySetTimeout: o tempo máximo de inatividade para conjuntos de entidades
–>ajustar esta propriedade impede a criação de conjuntos de entidades com tempos de inatividade excessivamente longos.
Além disso, a currentValues propriedade também fornece um nbEntitySetsatributo que indica o número de conjuntos de entidades atualmente mantidos na memória para a sessão.
Nota: Um valor «Indefinido» significa que não é aplicada qualquer quota e que o servidor REST utiliza o seu comportamento predefinido.
Limitar o número de conjuntos de entidades
Para tal, atualize a nbEntitySets propriedade.
Session.quotas.nbEntitySets:=100
No exemplo abaixo, a sessão está limitada a um máximo de 100 conjuntos de entidades na memória, e já foram criados 100 conjuntos de entidades:
{
"nbEntitySets": 100,
"currentValues": {
"nbEntitySets": 100
}
}
Na próxima tentativa de criar um conjunto de entidades, é devolvido um erro enquanto permanecerem 100 conjuntos de entidades na memória:
{
"__ERROR": [
{
"message": "Max number of entitysets has been reached for this session.",
"componentSignature": "dbmg",
"errCode": 2017
}
]
}
um exemplo mais concreto
O modo forceLogin fornece uma camada inicial de proteção, impedindo que conjuntos de entidades sejam criados em sessões não autenticadas. No entanto, mesmo após a autenticação, poderá querer restringir ainda mais o número de conjuntos de entidades que podem ser criados por funções de utilizador específicas.
No exemplo abaixo, o modo forceLogin está ativado.
Um utilizador com a função«Convidado» está limitado a um máximo de 100 conjuntos de entidades.
exposed Function authentify($credentials : Object) : Boolean
var $result:=False
Session.clearPrivileges()
If ($credentials.identifier="Guest")
Session.setPrivileges("")
Session.quotas.nbEntitySets:=100
$result:=True
Else
// Authenticate other users
// ...
Session.quotas.nbEntitySets:=200
$result:=True
End if
return $result
É claro que, se não utilizar o modo «forceLogin», as quotas também podem ser aplicadas da mesma forma utilizando o comando « Session ».
Configurar o tempo limite de inatividade predefinido para conjuntos de entidades
Por predefinição, o tempo de inatividade para conjuntos de entidades é de duas horas. Pode alterá-lo atualizando a defaultEntitySetTimeout propriedade (em segundos).
Session.quotas.defaultEntitySetTimeout:=300 // 5 minutes
Os conjuntos de entidades criados por um pedido como:
/rest/People?$filter='ID>=1'&$method=entityset
serão automaticamente libertados após cinco minutos se não forem utilizados durante esse período (ou seja, quando nenhum tempo de espera por inatividade for explicitamente especificado na solicitação).
Configurar o tempo limite máximo de inatividade para conjuntos de entidades
Pode definir o tempo máximo de inatividade permitido para conjuntos de entidades atualizando a maxEntitySetTimeout propriedade (em segundos).
Session.quotas.maxEntitySetTimeout:=420 // 7 minutes
Se um conjunto de entidades for criado com um tempo de espera por inatividade que exceda este limite, será automaticamente limitado a 420 segundos.
Por exemplo, para a seguinte solicitação:
/rest/People?$filter=ID>=4&$method=entityset&$timeout=600
o conjunto de entidades será libertado após 420 segundos, uma vez que o tempo de espera solicitado de 600 segundos é ignorado.
Experimente o HDI em anexo e aumente imediatamente a robustez das suas aplicações!
De momento, não é possível deixar comentários nesta publicação.