RestLib2
O RestLib2 é uma plataforma que tem por objetivo o fornecimento de APIs para os clientes, a partir da descrição da entidades envolvidas, e sem a necessidade de programação imperativa tradicional.
Em resumo, a partir da declaração em JSON das entidades que compõe um negócio, bem como dos relacionamentos entre estas, as APIs já estarão disponíveis em produção.
O objetivo final é permitir que o desenvolvimento de APIs se torne rápido e simples, acessível àqueles que tratam diretamente com o negócio (incluindo implantadores, e, no limite, o próprio cliente).
Links
Guia do EDL ESPECIFICAÇÃO DO MODELO DE ENTIDADES
Rota das APIs geradas
A rota para acesso a uma API gerada por variar de acordo com o modo de configuração escolhido pela aplicação que usar o RestLib2. Mas, via de regra, sugere-se o padrão aplicado na API de DadosMestre:
#############################
# List Prod
#############################
GET https://api.nasajon.app/dados-mestre/edl1/clientes?tenant=47&grupo_empresarial=NASAJON HTTP/1.1
Authorization: Bearer *****
Accept: application/json
- Note que, na API de Dados Mestre, todas as APIs do RestLib2 ficarão debaixo da rota:
https://api.nasajon.app/dados-mestre/edl1/ - O endpoint em si, varia a cada JSON, e fica configurado no nó
api.resourcedo JSON de EDL em questão.
Fluxo básico de uso
Há dois modos básicos de publicar novas APIs a partir de um JSON gerado, para uma aplicação previamente configurada para uso da plataforma:
Fluxo por meio de código versionado
- Criar o JSON de descrição da entidade desejada, gravando-o no diretório "@schemas/entities" da aplicação em questão (tome como exemplo o "dados-mestre").
- Fazer push das alterações.
- Aguardar o build da aplicação (pode ser útil conferir os logs do job de atualização dos JSON, na aplicação em questão, e também os logs do worker de compilação, no Argo).
- Testar as APIs compiladas.
Fluxo de deploy direto pela API
- Criar o JSON de descrição da entidade desejada.
- Registrá-lo diretamente, por meio da API de controle do RestLib2. segue exemplo de chamada abaixo:
###############################
# Post dinâmico
###############################
POST https://api.nasajon.app/restlib2/entities HTTP/1.1
Authorization: Bearer ******
Content-Type: application/json
{
"id": "{UUID}",
"escopo": "{escopo}",
"tenant": 0,
"grupo_empresarial": "00000000-0000-0000-0000-000000000000",
"codigo": "{codigo da entidade}",
"descricao": "{descrição da entidade}",
"json_schema": {
"edl_version": "1.0",
"escopo": "{escopo}",
"description": "{descrição da entidade}",
"id": "cliente",
"version": "0.0.1",
...
}
}
Observações:
- Note que, acima há placeholders a alterar.
- Note também que o JSON não está completo, e, o correto é deguir a documentação do EDL.
- Os valores tenant=0 e grupo_empresarial=00000000-0000-0000-0000-000000000000, indicam que a entidade é padrão, e serve para todos os tenants e grupos.
- Essa rota irá retornar algo semelhante a:
HTTP/1.1 202 ACCEPTED
Location: https://api.nasajon.app/restlib2/entity-compilations/status/{UUID do processo de compilação}
E, se você fizer uma chamada à rota retornada, poderá acompanhar o status da compilação, incluindo eventuais erros que venham a ocorrer.
- Testar a API compilada.
Como rodar a compilação de EDLs localmente?
Você pode testar a compilação de seus EDLs localmente, incluindo a execução de diversas validações sobre os mesmos, desde que todos estejam dispostos num mesmo diertório.
Para isso, considere os passos a seguir:
- Crie um diretório, e coloque todos os seus EDLs lá (garantindo que EDLs relacionados estejam no mesmo).
- Instale, no seu ambiente pyhton de teste, a biblioteca
nsj-rest-lib2:
pip install nsj-rest-lib2
- Rode o comando abaixo (adaptado para seu diretório):
python3 -m nsj_rest_lib2.compiler.compiler -d $(shell pwd)/{diretorio_com_os_edls_json}
O resultado da compilação será impresso no console (erros, ou código total gerado).
Como configurar uma aplicação para expôr rotas de acordo com o padrão do RestLib2?
Para que uma aplicação exponha as rotas no padrão do RestLib2, não são necessários muitos passos. Antes basta:
- Instalar, em sua aplicação, a dependência para o projeto nsj-rest-lib2
pip install nsj-rest-lib2
Não esqueça de fixar a versão usada (como sendo a última), no arquivo requirements.txt.
- Adicione a variável de ambiente abaixo em sua aplciação
ESCOPO_RESTLIB2: "{COLOQUE O IDENTIFICADOR DE ESCOPO QUE DESEJAR PARA SUA APLICAÇÃO (UMA SIMPLES STRING SEM ESPAÇO)}"
- Esse identificador de escopo deve se único para sua aplicação.
- É importante nota que sua aplicação só irá expôr JSONs de EDL configurados para o mesmo escopo definido aqui.
- Instale, como dependência a biblioteca, nsj-rest-lib2:
pip install nsj-rest-lib2
Não esqueça de fixar a versão usada (como sendo a última), no arquivo requirements.txt.
- Adicione a linha abaixo no arquivo wsgi.py (de inicilização de sua aplicação):
from nsj_rest_lib2.controller.dynamic_controller import setup_dynamic_routes
from nasajon.injector_factory_multibanco import InjectorFactoryMultibanco
setup_dynamic_routes(application, injector_factory=InjectorFactoryMultibanco)
- No exemplo acima, a rota é multibanco, mas, não é obrigatório.
- Os parâmetros de setup são:
- flask_app: Variável obrigatório, que aponte para sua aplicação Flask.
- multidb: Flag (padrão True)
- dynamic_root_path: URL padrão base de todos os endpoints do RestLib2 (padrão: "edl1")
- injector_factory: Classe de injeção de depndência usada (normalmente necessária para aplicações multibanco; o principal uso é justamente manipular a criação da conexão com o BD).
Carregando EDLs direto do disco
Também é possível carregar EDLs diretamente do disco, sem depender exclusivamente do Redis. Para isso, use o parâmetro opcional edls_path em setup_dynamic_routes, apontando para um caminho relativo ao workdir da aplicação (ou absoluto), contendo arquivos .json, .yml ou .yaml com os EDLs.
Exemplo:
from nsj_rest_lib2.controller.dynamic_controller import setup_dynamic_routes
setup_dynamic_routes(
application,
injector_factory=InjectorFactoryMultibanco,
edls_path="@schemas/entities",
)
Observações:
- Os EDLs são carregados e compilados uma vez, ficando em cache em memória. Chamadas seguintes reutilizam o cache.
- A resolução das entidades ocorre primeiro pelo cache local; se não encontrar, o Redis é consultado (quando habilitado).
Para desabilitar o Redis e usar somente EDLs do disco, defina a variável de ambiente abaixo:
EDLS_FROM_REDIS=false
O valor padrão de EDLS_FROM_REDIS é true.
Pronto, isso deve bastar para expôr os EDLs configurados para o mesmo escopo da aplicação.
OBSERVAÇÃO GERAL: Isso só funciona para aplicações Flask.
Metadata
Release files for nsj-rest-lib2 0.0.41
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| nsj_rest_lib2-0.0.41.tar.gz | 76.9 kB | Without provenance | Details for nsj_rest_lib2-0.0.41.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| nsj_rest_lib2-0.0.41-py3-none-any.whl | Python 3 | none | any | Details for nsj_rest_lib2-0.0.41-py3-none-any.whl |
Total release size: 158.3 kB
Release files / nsj_rest_lib2-0.0.41.tar.gz
| Download URL | nsj_rest_lib2-0.0.41.tar.gz |
|---|---|
| Size | 76.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8cee588dd6c3e73d2efab80f04b835b44a3f7159256043f41ed1041a89e9e7d3
|
|
BLAKE2b-256 checksum How to use checksums |
53756680dcbcf22da1190f159079716bb8d38660528152a8f29eb917ec1ccd8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.2
|
Release files / nsj_rest_lib2-0.0.41-py3-none-any.whl
| Download URL | nsj_rest_lib2-0.0.41-py3-none-any.whl |
|---|---|
| Size | 81.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a2b206f3d05fba9ce0bc5c0a588bdb23f7e3c363b39507c7035369b397d12317
|
|
BLAKE2b-256 checksum How to use checksums |
e461deca3e277158f2f0da8b963d75a5285a8a39ab33eee203219b7680cb3c94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.2
|
Security for nsj-rest-lib2 0.0.41
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.