Integração da Interface OpenAPI¶
A implementação do contrato especificado em Contrato Integração terá as seguintes etapas:
- Remoção dos objetos estranhos ao contrato.
- Modificações nos filtros e atributos padrão do código gerado para API rest a partir dos templates do ABP.
- Criação de um view model que atenda às estruturas de dados do contrato.
- Implementação das operações apropriadas em controllers.
O projeto de trabalho para esta fase é o projeto Magna.IndicePmo.HttpApi.
O modelo de dados¶
O modelo de dados criado é do tipo Objeto plano em c# (POCO). Cada propriedade é anotada com atributos de tal maneira que os atributos de cada classe expressem o contrato OpenApi.
Nesta fase não temos ainda objetos de domínio, mas será necessário mapeá-los mais tarde. Portanto incluímos em nosso modelo de dados um auxiliar de mapeamento.
Esta é uma operação bastante manual. O resultado desse trabalho é apresentado abaixo:
As operações¶
A implementação deste tipo de operação é realizada utilizando como base classes do tipo Controller ⧉. Na nossa implementação, utilizaremos como controller base de partida, a classe abstrata criada junto com o template do Abp IndicePmoController
.
RegistroIndices2Controller
: Para as operações de listagem de índices.Questionarios2Controller
: Para as operações de listagem de listas preenchidas.RegistroQuestionario2Controller
: Para as operações de CRUD de uma lista.
Note-se que cada uma das classes e rotinas das classes de controle tem anotações para especificar o nome do endpoint, a versão, o tipo de método que atende e o tipo de resposta que produz.
Refinamento da interface exposta para integração¶
Neste ponto, os objetos expostos no front-end utilitário fornecido pelo Swagger tem várias inconsistências com o modelo projetado inicialmente. As principais inconsistências:
- Nomenclatura gerada é
PascalCase
enquanto o contrato éCamelCase
. - Nomes de objetos com namespace inerentes à implementação. Lembre que o contrato deve ser agnóstico.
- Coleções e enumerações não estão consistentes.
- Objetos do framework ABP poluem o contrato.
Para sanar essas inconsistências, é necessário usar alguns truques e componentes do SwashBuckle e do ModelApiExplorer. Dentre eles SwaggerGenOptions
e IDocumentFilter
. As configurações e modificações mencionadas estão agrupadas no diretório OpenApi
.
Feitas as modificações, o resultado do contrato deve ser o seguinte:
E é isto!
Passemos agora à implementação das operações funcionais propriamente ditas.