Pular para conteúdo

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:

Modelo de dados API

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.

Detalhes das classes do tipo Controller

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:

swagger 1a Versão do Contrato

  • 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.

Objetos utilizados para configuração adequada API

Feitas as modificações, o resultado do contrato deve ser o seguinte:

Normalização contrato OpenAPI

E é isto!

Passemos agora à implementação das operações funcionais propriamente ditas.