Biblioteca que fornece modelos e estruturas padronizadas para facilitar a integração entre sistemas via APIs RESTful.
Project description
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).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nsj_integracao_api_entidades-1.0.0a25.post54.tar.gz.
File metadata
- Download URL: nsj_integracao_api_entidades-1.0.0a25.post54.tar.gz
- Upload date:
- Size: 149.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de4377c941e7d779cb7cf3e868b44b736169c94e6bf18a3ad9741ffbbfd7459b
|
|
| MD5 |
622a18c8e3bd016ab8657c315123ae80
|
|
| BLAKE2b-256 |
36008f335b847ca703e255ffc0db7c23c94bc86e94c5bd07ca744b10ae0f1bfe
|
File details
Details for the file nsj_integracao_api_entidades-1.0.0a25.post54-py3-none-any.whl.
File metadata
- Download URL: nsj_integracao_api_entidades-1.0.0a25.post54-py3-none-any.whl
- Upload date:
- Size: 610.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c894015935cde8c013144db0c1da15f21045aa6dead2bc923d87f689d88df99f
|
|
| MD5 |
957f50307663da4f75fb0581a6fc23cd
|
|
| BLAKE2b-256 |
201b08815554210b382bc6edbbc4c0d194cf855dbbfc09a71839c2e9df46dec5
|