Páginas filhas
  • Validador Automatizado de APIs: Validações realizadas e formas de correção

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Esta verificação serve para garantir que não haja nenhum caracter do tipo "�", configurando um problema de enconding. Para corrigir, verifique seu arquivo OpenAPI e ajuste as ocorrências desses caracteres.

Verifique o encode do arquivo (Deve ser UTF-8).

should be complient with OpenAPI in version 3.0'

...

As propriedades "url" e "variables" devem existir dentro da propriedade "servers". Para corrigir este erro, ajuste o arquivo OpenAPI de modo que exista a propriedade "servers", com suas respectivas propriedades "url" e "variables".

should have an URL

...

starting with {{host}}

A URL As URLs descritas dentro da propriedade "url" (dentro de "servers") deve iniciar com o valor "{{host}}". Isso é importante para que o site consiga fazer substituições desse placeholder por ambientes para sandbox.

should have an URL consistent with our model

A URL descritas dentro da propriedade "url" (dentro de "servers") devem cumprir as regras da seguinte expressão regular: /( devem cumprir as regras da seguinte expressão regular: /(?:.*)\/api\/(?:.*)\/api\/(?:.*)\/v[0-9]*$/ . Um erro comum é a adição desnecessária de uma barra ("/") ao final da URL. Corrija a URL do servidor para que o erro pare de ser apontado.

...

Informações

De acordo com o versionamento semântico, somente trabalhamos com versões menores enquanto não existe quebra de contrato.

Quando a quebra de contrato se faz necessária, é preciso subir uma versão maior.

2.000 -> 2.001 100 : Subindo versão menor

2.000 -> 3.000 : Subindo versão maior

...

Todos os schemas referenciados no arquivo Open API devem conseguir ser derreferenciados. O algoritmo de derreferenciação acessa cada uma das referências à schemas e injeta todo o conteúdo do jsonSchema externo dentro do objeto parseado do OpenAPI. Logo, um schema que não pôde ser derreferenciado é um schema que não conseguiu ser acessado da forma correta. Qualquer erro de estruturação do arquivo jsonSchema pode causar uma falha no processo de parsing do arquivo (processo de transformação do arquivo json em objeto). Uma referência a um link quebrado, ou um arquivo/propriedade inexistente são causas comuns do disparo desse erro.

should contain the same Id property name in URL and body

O type {id} descrito no path do endpoint deve estar presente também no jsonSchema referenciado. Logo, caso haja um "/{id}" na URL, deve haver também uma propriedade "id" definida no corpo do schema, escrita exatamente igual a da URL (CaseSensitive).

should contain 'hasNext' prop if there is 'items' prop and vice versa

Caso um determinado type no jsonSchema tenha a propriedade "hasNext", obrigatoriamente este deve possuir também a propriedade "items", e vice-versa. Isso ocorre pois a propriedade "hasNext" serve para indicar que se trata de um type paginado, enquanto a propriedade "items" evidencia quais são os types a serem paginados.

should be 'required=true' at schema, because it's a final path param

Sempre que o path terminar com um {id}, este {id} deve obrigatoriamente ser required em seu schema (por ser um dado obrigatório).

should have 'hasNext' when it's an 'getAll' endpoint

É chamado de "getAll" todo path que, quando requisitado por método get, retorna uma collection. Logo, não faz sentido um endpoint de retorno de coleção não retornar uma paginação de elementos (caracterizada pela presença do hasNext).

...

Informações
titleBranch Path

Um erro comum é referenciar o schema para a pra branch "master", sendo que o mesmo ainda não existe remotamente antes da aprovação, "https://raw.githubusercontent.com/totvs/ttalk-standard-message/master/jsonschema/schemas/Ticket_1_000.json#" → ERRO

O correto é apontar para o URL da branch atual:
"https://raw.githubusercontent.com/totvs/ttalk-standard-message/Ticket/V1/1_000/jsonschema/schemas/Ticket_1_000.json#" → OK

Após aprovação, essa URL será ajustada para a branch "master" automaticamente.


should contain the same Id property name in URL and body

O type {id} descrito no path do endpoint deve estar presente também no jsonSchema referenciado. Logo, caso haja um "/{id}" na URL, deve haver também uma propriedade "id" definida no corpo do schema, escrita exatamente igual a da URL (CaseSensitive).

should contain 'hasNext' prop if there is 'items' prop and vice versa

Caso um determinado type no jsonSchema tenha a propriedade "hasNext", obrigatoriamente este deve possuir também a propriedade "items", e vice-versa. Isso ocorre pois a propriedade "hasNext" serve para indicar que se trata de um type paginado, enquanto a propriedade "items" evidencia quais são os types a serem paginados.

should be 'required=true' at schema, because it's a final path param

Sempre que o path terminar com um {id}, este {id} deve obrigatoriamente ser required em seu schema (por ser um dado obrigatório).

should have 'hasNext' when it's an 'getAll' endpoint

É chamado de "getOnegetAll" todo path que, quando requisitado por método get, retorna um elemento específico ({id})uma collection. Logo, não faz sentido um endpoint de retorno único de coleção não retornar uma paginação de elementos (caracterizada pela presença do hasNext).

Parameters:

shouldn't have 'hasNext' when it's an 'getOne' endpoint

É chamado de "getOne" todo path que, quando requisitado por método get, retorna um elemento específico ({id}). Logo, não faz sentido um endpoint de retorno único retornar uma paginação de elementos (caracterizada pela presença do hasNext).

Parameters:

should have 'page', 'pagesize' and 'order' for collection endpoints

...

O OpenAPI deve utilizar responses padronizadas para casos de erros (ErrorModelErrorModelBase e ErrorDetail). Maiores informações podem ser encontradas no nosso Guia de Implementação de Integrações.

xtotvs:

paths:

should contain xtotvs inside 'paths'

A propriedade "x-totvs" deve existir em todos os "paths". 

should contain xtotvs/productinformation as an array inside 'paths'

A propriedade "productInformation" , deve existir dentro da de "x-totvs" dos "paths", e deve ser do tipo array.

should contain 'product' as a key in productInformation, inside 'paths'

...

Todos os produtos que forem declarados nos "productInformation" de cada um dos "paths" do OpenAPI devem estar presentes também no "x-totvs" da "info". Essa verificação se faz necessária pois sempre que um endpoint é implementado em um produto, este produto deve ser explicitado no cabeçalho da especificação de API ("info"), facilitando o acesso a informação de quem lê o arquivo OpenAPI.acesso a informação de quem lê o arquivo OpenAPI.

Content-Type:

should be one of the supported/allowed ContentTypes

O "Content-Type" definido deve ser um dos permitidos, que são os seguintes:

-audio/aac

-application/x-abiword

-application/octet-stream

-video/x-msvideo

-application/vnd.amazon.ebook

-application/x-bzip

-application/x-bzip2

-application/x-csh

-text/css

-text/csv

-text/xml

-application/msword

-application/vnd.ms-fontobject

-application/epub+zip

-image/gif

-text/html

-image/x-icon

-text/calendar

-application/java-archive

-image/jpeg

-application/javascript

-application/json

-audio/midi

-video/mpeg

-application/vnd.apple.installer+xml

-application/vnd.oasis.opendocument.presentation

-application/vnd.oasis.opendocument.spreadsheet

-application/vnd.oasis.opendocument.text

-audio/ogg

-video/ogg

-font/otf

-image/png

-application/pdf

-application/vnd.ms-powerpoint

-application/x-rar-compressed

-application/rtf

-application/x-sh

-image/svg+xml

-application/x-shockwave-flash

-application/x-tar

-image/tiff

-application/typescript

-font/ttf

-application/vnd.visio

-audio/x-wav

-audio/webm

-video/webm

-image/webp

-font/woff

-font/woff2

-application/xhtml+xml

-application/vnd.ms-excel

-application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

-application/xml

-application/vnd.mozilla.xul+xml

-application/zip

-video/3gpp

-audio/3gpp

-video/3gpp2

-audio/3gpp2

-application/x-7z-compressed

should have matching body content

Para endpoints de arquivos binários, é obrigatório que o schema siga a seguinte estrutura (Com "type": "string" e "format":"binary") (https://swagger.io/docs/specification/describing-request-body/file-upload/)


Bloco de código
languageyml
requestBody:
  content:
    image/png:
      schema:
        type: string
        format: binary


Schemas:

Filename:

should start with uppercase letter

...

A propriedade "x-totvs" deve ser um array, quando existir dentro de alguma das "properties", dentro de "definitions", nos jsonSchemas. Esse caso pode ser observado no schema AppliedMatrix_1_000.json. Porém o x-totvs pode também não ser especificado (como no schema Absence_1_000.json) e continuar dentro dos padrões000.json) e continuar dentro dos padrões.

should have the property 'product' correctly spelled

Os "x-totvs" dos types devem possuir uma propriedade "product" (com essa grafia) para especificar qual o produto que está sendo definido naquele determinado elemento de array.

should have the property '

...

available' correctly spelled

...

Os "x-totvs" dos types devem possuir uma propriedade "available" (com essa grafia) para especificar se o produto definido naquele determinado elemento de array está disponível ou não.

should have required as a boolean type inside x-totvs

Todas as propriedades "required" dos Os "x-totvs" dos types devem possuir uma propriedade "product" (com essa grafia) para especificar qual o produto que está sendo definido naquele determinado elemento de array.

should have the property 'available' correctly spelled

Os "x-totvs" dos types devem possuir uma propriedade "available" (com essa grafia) para especificar se o produto definido naquele determinado elemento de array está disponível ou não.

...

ser do tipo boolean (true ou false). Essa verificação se fez necessária pelo fato de alguns schemas estarem especificando os campos available com strings (ex. "true"/"false"), fazendo com que a informação pudesse ser interpretada de forma equivocada.

should have canUpdate as a boolean type inside x-totvs

Todas as propriedades "requiredcanUpdate" dos "x-totvs" dos types devem ser do tipo boolean (true ou false). Essa verificação se fez necessária pelo fato de alguns schemas estarem especificando os campos available com strings (ex. "true"/"false"), fazendo com que a informação pudesse ser interpretada de forma equivocada.

should have

...

small words in 'notes'

Não é permitida nenhuma palavra existente em propriedades "notes" que ultrapasse o limite máximo de 50 caracteres.

O único separador de palavras entendido pela UI e pelo validador é o espaço em branco.
Sendo assim, ao separar palavras utilizando pipes "|" ou ponto e virgula ";" ou qualquer outro caractere, implica que será entendido como uma única palavra.

Links costumam ser outra causa para esse erro. Favor utilizar um encurtador de URL (https://bitly.com/)     Todas as propriedades "canUpdate" dos "x-totvs" dos types devem ser do tipo boolean (true ou false). Essa verificação se fez necessária pelo fato de alguns schemas estarem especificando os campos available com strings (ex. "true"/"false"), fazendo com que a informação pudesse ser interpretada de forma equivocada.

Enum:

should be a string

A propriedade "enum" deve ser descrita como um array de strings. Um erro comum é a inserção de números ao invés de strings no array.

...