This release is a pre-release and may not be stable for production use.
nsj_integracao_entidades
O nsj-integracao-entidades é uma biblioteca que fornece modelos e estruturas padronizadas para facilitar a integração entre sistemas via APIs RESTful. O objetivo é oferecer uma base consistente para gerenciar dados e entidades compartilhadas entre diferentes aplicações.
Criando entidades
A biblioteca segue o modelo estabelecido no rest lib onde são necessárias três contruções: DTO, Entity e Controller, podendo caso haja necessidade de customização de fluxo, sobrescrever Sevice e DAO, que geralmente são usados internamente.
A maioria das contruções é feita por decorators, que ajudam a definir as regras de negócio e validações.
DTO, Entity e Controller
-
Entity: Representa a estrutura de dados persistida no banco de dados, incluindo regras de negócio e validações específicas.
-
DTO (Data Transfer Object): Responsável por transportar dados entre diferentes camadas da aplicação, geralmente utilizado para entrada e saída de informações em APIs.
-
Controller: Atua como intermediário entre a API e as camadas de serviço, gerenciando as requisições e respostas, além de orquestrar a lógica necessária para atender às operações solicitadas.
Para adicionar uma entidade ao projeto, é necessário as três construções anteriores. Abaixo um exemplo de implementação simplificado para a entidade de faixas:
Entidade: @Entity
import datetime
import uuid
from nsj_rest_lib.entity.entity_base import EntityBase
from nsj_rest_lib.decorator.entity import Entity
@Entity(
table_name="persona.faixas",
pk_field="faixa",
default_order_fields=["codigo"],
)
class FaixaEntity(EntityBase):
faixa: uuid.UUID = None
tenant: int = None
codigo: str = None
descricao: str = None
lastupdate: datetime.datetime = None
Essa classe criar uma entidade de faixas com o nome
FaixaEntitye as propriedades correspondentes, definindo o nome da tabela, chave primária e campos de ordenação padrão.
DTO: @DTO
import datetime
import uuid
from nsj_rest_lib.decorator.dto import DTO
from nsj_rest_lib.descriptor.dto_field import DTOField
from nsj_rest_lib.descriptor.dto_field_validators import DTOFieldValidators
from nsj_rest_lib.dto.dto_base import DTOBase
# Imports Lista
from nsj_rest_lib.descriptor.dto_list_field import DTOListField
from nsj_integracao_api_entidades.dto.persona_itensfaixas import ItensfaixaDTO
from nsj_integracao_api_entidades.entity.persona_itensfaixas import ItensfaixaEntity
# Configuracoes execucao
from nsj_integracao_api_entidades.config import (tenant_is_partition_data)
@DTO()
class FaixaDTO(DTOBase):
# Atributos da entidade
id: uuid.UUID = DTOField(
pk=True,
entity_field='faixa',
resume=True,
not_null=True,
strip=True,
min=36,
max=36,
validator=DTOFieldValidators().validate_uuid,)
tenant: int = DTOField(
partition_data=tenant_is_partition_data,
resume=True,
not_null=True,)
codigo: str = DTOField(
candidate_key=True,
strip=True,
resume=True,
not_null=True,)
descricao: str = DTOField()
lastupdate: datetime.datetime = DTOField()
# Atributos de lista
itensfaixas: list = DTOListField(
dto_type=ItensfaixaDTO,
entity_type=ItensfaixaEntity,
related_entity_field='faixa'
)
Essa classe cria um DTO de faixas com o nome
FaixaDTOe as propriedades correspondentes, definindo o nome da tabela, chave primária e campos de ordenação padrão. A classe DTOField e DTOListField ajudam a definir as regras de negócio e validações das propriedades da entidade. Em especial o DTOListField permite construir listas de DTOs relacionados a uma entidade (agregações).
Controller:
Nesse arquivo são declaradas as rotas e os mapeamentos para as entidades. Cada rota possui um decorator correspondente, que define as regras de negócio e validações das requisições.
from nsj_rest_lib.controller.get_route import GetRoute
from nsj_rest_lib.controller.list_route import ListRoute
from nsj_rest_lib.controller.post_route import PostRoute
from nsj_rest_lib.controller.put_route import PutRoute
from nsj_rest_lib.controller.delete_route import DeleteRoute
from nsj_integracao_api_entidades.nsj_rest_lib_extensions.controller.integrity_check_route import IntegrityCheckRoute
from nsj_integracao_api_entidades.auth import auth
from nsj_integracao_api_entidades.injector_factory import InjectorFactory
from nsj_integracao_api_entidades.settings import application, APP_NAME, MOPE_CODE
from nsj_integracao_api_entidades.dto.persona_faixas import FaixaDTO as DTO
from nsj_integracao_api_entidades.entity.persona_faixas import FaixaEntity as Entity
ROUTE = f"/{APP_NAME}/{MOPE_CODE}/faixas"
ID_ROUTE = f"/{APP_NAME}/{MOPE_CODE}/faixas/<id>"
INTEGRITY_ROUTE = f"/{APP_NAME}/{MOPE_CODE}/faixas/verificacao-integridade"
@application.route(ROUTE, methods=["GET"])
@auth.requires_api_key_or_access_token()
@ListRoute(
url=ROUTE,
http_method="GET",
dto_class=DTO,
entity_class=Entity,
injector_factory=InjectorFactory,
)
def persona_faixas_list_action(_, response):
return response
@application.route(f"{ROUTE}/<id>", methods=["GET"])
@auth.requires_api_key_or_access_token()
@GetRoute(
url=f"{ROUTE}/<id>",
http_method="GET",
dto_class=DTO,
entity_class=Entity,
injector_factory=InjectorFactory,
)
def persona_faixas_get_action(_, response):
return response
@application.route(ROUTE, methods=["POST"])
@auth.requires_api_key_or_access_token()
@PostRoute(
url=ROUTE,
http_method="POST",
dto_class=DTO,
entity_class=Entity,
injector_factory=InjectorFactory,
)
def persona_faixas_post_action(_, response):
return response
@application.route(ID_ROUTE, methods=["PUT"])
@auth.requires_api_key_or_access_token()
@PutRoute(
url=ID_ROUTE,
http_method="PUT",
dto_class=DTO,
entity_class=Entity,
injector_factory=InjectorFactory,
)
def persona_faixas_put_action(_, response):
return response
@application.route(ROUTE, methods=["PUT"])
@auth.requires_api_key_or_access_token()
@PutRoute(
url=ROUTE,
http_method="PUT",
dto_class=DTO,
entity_class=Entity,
injector_factory=InjectorFactory,
)
def persona_faixas_put_list_action(_, response):
return response
@application.route(ID_ROUTE, methods=["DELETE"])
@auth.requires_api_key_or_access_token()
@DeleteRoute(
url=ID_ROUTE,
http_method="DELETE",
dto_class=DTO,
entity_class=Entity,
injector_factory=InjectorFactory,
)
def persona_faixas_delete_action(_, response):
return response
@application.route(ROUTE, methods=["DELETE"])
@auth.requires_api_key_or_access_token()
@DeleteRoute(
url=ROUTE,
http_method="DELETE",
dto_class=DTO,
entity_class=Entity,
injector_factory=InjectorFactory,
)
def persona_faixas_delete_list_action(_, response):
return response
@application.route(INTEGRITY_ROUTE, methods=["GET"])
@auth.requires_api_key_or_access_token()
@IntegrityCheckRoute(
url=INTEGRITY_ROUTE,
http_method="GET",
dto_class=DTO,
entity_class=Entity,
injector_factory=InjectorFactory,
)
def persona_faixas_integrity_check_action(_, response):
return response
Todas as entidades deverão ter as rotas conforme declaradas nestes arquivo, considerando o padrão de rotas que se espera para cada entidade.
As rotas definidas por cada decorator são as seguintes:
@ListRoute: Define uma rota para listagem de entidades.@GetRoute: Define uma rota para obter uma entidade.@PostRoute: Define uma rota para criar uma nova entidade ou uma nova lista de entidades.@PutRoute: Define uma rota para atualizar uma entidade ou uma lista de entidades.@DeleteRoute: Define uma rota para excluir uma entidade ou uma lista de entidades.@IntegrityCheckRoute: Define uma rota para verificar integridade das entidades.
Para maiores detalhes sobre mapeamentos e outras convenções, consulte a documentação oficial do rest lib.
Publicando novas versões da biblioteca
-
Atualize o arquivo
setup.cfgcom a nova versão da biblioteca e ajsutes de dependências. -
Rode o comando make publicar_pkg para publicar a nova versão na pypi. Certifique-se de instalar as dependências de dev antes (requirements-dev.txt).
Metadata
Release files for nsj-integracao-api-entidades 1.0.0a25.post31
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nsj_integracao_api_entidades-1.0.0a25.post31.tar.gz | 142.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nsj_integracao_api_entidades-1.0.0a25.post31-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 710.7 kB
Release files / nsj_integracao_api_entidades-1.0.0a25.post31.tar.gz
| Download URL | nsj_integracao_api_entidades-1.0.0a25.post31.tar.gz |
|---|---|
| Size | 142.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f52644fc22092ae42ef525870222b5b6413c3b9de478dcf066e2f082aea67d9d
|
|
BLAKE2b-256 checksum How to use checksums |
43ff519d6bd2013d5d36129c51819cdb30c03cb600f748bae17b27b746938e9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.12
|
Release files / nsj_integracao_api_entidades-1.0.0a25.post31-py3-none-any.whl
| Download URL | nsj_integracao_api_entidades-1.0.0a25.post31-py3-none-any.whl |
|---|---|
| Size | 568.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
911a528c9ba7204b5c1caa423ee7bb3457a93747d6574b18c83b56a72bc2b64d
|
|
BLAKE2b-256 checksum How to use checksums |
e2dc473f24aa4fad8bc0e8635595a94192f991934031a78e3d8e2b6d28ea3294
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.12
|