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.

...

Mudanças permitidas: 

→ Novos Endpoints

→ Novos Verbos Http

→ Novas Propriedades no Schema (Desde que a API continue funcionando apenas com as que existiam anteriormente).

...

→ Endpoints removidos ou com assinatura alterada

→ Verbos Http removidos

→ Parâmetros obrigatórios → Parâmetros obrigatórios adicionados

→ Parâmetros removidos ou renomeados

...

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

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

Todos os endpoints de collection devem possuir meios para controlar a paginação. Logo, devem estar presentes os parâmetros "page" para indicar a página corrente, "pagesize" para identificar o tamanho da página e "order" para tratar a ordenação.

should use common parameters

A API deve referenciar parâmetros padronizados para Authorization, Order, Page, PageSize, AcceptLanguage, Fields e Expand. Esses parâmetros devem ser referenciados diretamente do nosso repositório no GitHub, através do arquivo totvsApiTypesBase.json. Maiores informações podem ser encontradas no nosso Guia de Implementação de Integrações.

same ID defined inside path should also be present inside the 'parameters' property

O ID definido em um PATH também deve estar definido dentro da propriedade “Parameters” (seja direto no path ou nos verbos HTTP).

should be 'required=true' when final path param

Sempre que o path de um endpoint terminar com um {id}, o type referenciado por aquele {id} na response de sucesso (200) deve obrigatoriamente ser required no schema (por ser um dado obrigatório).

Errors:

should use common errors schema

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/productinformation as an array inside 'paths'

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

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

Dentro da propriedade "productInformation", da "x-totvs" dos "paths", deve existir a propriedade "product".

should contain 'available' inside productInformation, inside 'paths'

Dentro da propriedade "productInformation", da "x-totvs" dos "paths", deve existir a propriedade "available".

all products declared inside 'info' should also exist inside 'paths' x-totvs

Todos os produtos que forem declarados no "productInformation" da "info" do OpenAPI devem estar presentes em pelo menos um dos "x-totvs" dos "paths". Essa verificação se faz necessária pois não há sentido em se declarar um produto na "info" do OpenAPI quando não há nenhum endpoint implementado para aquele produto.

all 'available' properties must be boolean

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

info:

should have 'product' in the correct pattern

A propriedade "productInformation" do "x-totvs" da "info" deve ser um array de objetos. Além disso, a propriedade "product" deve existir dentro desta "productInformation".

segment name should be standardized

Para evitar inconsistência no armazenamento e visualização de nossas APIs, a grafia do campo "segment" deve estar de acordo com padrões previamente determinados. Para saber qual a grafia correta do segmento que deseja declarar, visite a lista de referências do portal de APIs e verifique no menu lateral (sob o título "Agrupadores") os padrões de grafia aceitos.

product name should be standardized

Para evitar inconsistência no armazenamento e visualização de nossas APIs, a grafia do campo "product" deve estar de acordo com padrões previamente determinados. Para saber qual a grafia correta do produto que deseja declarar, visite a lista de referências do portal de APIs e verifique no menu lateral (sob o título "Produtos") os padrões de grafia aceitos.

all products declared inside paths should also exist inside info x-totvs

...

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 "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).

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

Todos os endpoints de collection devem possuir meios para controlar a paginação. Logo, devem estar presentes os parâmetros "page" para indicar a página corrente, "pagesize" para identificar o tamanho da página e "order" para tratar a ordenação.

should use common parameters

A API deve referenciar parâmetros padronizados para Authorization, Order, Page, PageSize, AcceptLanguage, Fields e Expand. Esses parâmetros devem ser referenciados diretamente do nosso repositório no GitHub, através do arquivo totvsApiTypesBase.json. Maiores informações podem ser encontradas no nosso Guia de Implementação de Integrações.

same ID defined inside path should also be present inside the 'parameters' property

O ID definido em um PATH também deve estar definido dentro da propriedade “Parameters” (seja direto no path ou nos verbos HTTP).

should be 'required=true' when final path param

Sempre que o path de um endpoint terminar com um {id}, o type referenciado por aquele {id} na response de sucesso (200) deve obrigatoriamente ser required no schema (por ser um dado obrigatório).

Errors:

should use common errors schema

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 de "x-totvs" dos "paths", e deve ser do tipo array.

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

Dentro da propriedade "productInformation", da "x-totvs" dos "paths", deve existir a propriedade "product".

should contain 'available' inside productInformation, inside 'paths'

Dentro da propriedade "productInformation", da "x-totvs" dos "paths", deve existir a propriedade "available".

all products declared inside 'info' should also exist inside 'paths' x-totvs

Todos os produtos que forem declarados no "productInformation" da "info" do OpenAPI devem estar presentes em pelo menos um dos "x-totvs" dos "paths". Essa verificação se faz necessária pois não há sentido em se declarar um produto na "info" do OpenAPI quando não há nenhum endpoint implementado para aquele produto.

all 'available' properties must be boolean

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

info:

should have 'product' in the correct pattern

A propriedade "productInformation" do "x-totvs" da "info" deve ser um array de objetos. Além disso, a propriedade "product" deve existir dentro desta "productInformation".

segment name should be standardized

Para evitar inconsistência no armazenamento e visualização de nossas APIs, a grafia do campo "segment" deve estar de acordo com padrões previamente determinados. Para saber qual a grafia correta do segmento que deseja declarar, visite a lista de referências do portal de APIs e verifique no menu lateral (sob o título "Agrupadores") os padrões de grafia aceitos.

product name should be standardized

Para evitar inconsistência no armazenamento e visualização de nossas APIs, a grafia do campo "product" deve estar de acordo com padrões previamente determinados. Para saber qual a grafia correta do produto que deseja declarar, visite a lista de referências do portal de APIs e verifique no menu lateral (sob o título "Produtos") os padrões de grafia aceitos.

all products declared inside paths should also exist inside info x-totvs

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.

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.

...