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: /(?:.*)\/api\/ devem cumprir as regras da seguinte expressão regular: /(?:.*)\/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.

...

O nome do arquivo OpenAPI deve trazer a mesma versão contida na "info" deste mesmo arquivo. Para corrigir esse erro, faça o ajuste da versão, garantindo a consistência entre o nome do arquivo e as informações contidas na "info".

Endpoints:

shouldn't contain 'post', 'put', 'get' or 'delete' in the URL

Nenhum endpoint pode conter, em sua url (path), métodos HTTP. O path do endpoint deve especificar apenas o recurso que o usuário enviará a requisição.

should contain success responses for all http verbs

Para cada endpoint e método HTTP, deve existir uma response para caso de sucesso (200) na requisição.

should specify 'Id' for all PUT operations

Nenhum endpoint de collection pode aceitar métodos PUT. Todas as operações de método PUT devem ter especificadas um {id}.

should have unique 'operationId'

As propriedades "operationId" de cada um dos endpoints tem que ser únicas. Não podem existir dois endpoints com a mesma operationId.

Schemas:

shouldn't contain 'schemas' definition inside this file

Dentro da especificação OpenAPI não pode conter definição de schemas. Os schemas devem ser declarados em outro arquivo, como especificado no Guia de Implementação de Integrações.

should use external schemas for all requests and responses

Todas as requests e responses de todos os endpoints devem utilizar schemas externos, sendo apenas referenciados dentro do OpenAPI.

should be dereferenced. This means all external references are correct (FilePaths and Object property names)

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.

should reference valid param objects

Todos os objetos referenciado nos "parameters" devem ser válidos. Esse erro é disparado quando um objeto em um parâmetro não consegue ser acessado de forma apropriada (geralmente por erro de digitação, causando inconsistência entre a url que faz a referência e o nome do objeto em si).

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

...

should be backward compatible with minor versions

Esse arquivo OpenAPI é referente a uma nova versão menor, porém o mesmo está apresentando quebra de compatibilidade ("breaking changes") em relação à versão menor anterior.

Mudanças permitidas: 

→ Novos Endpoints

→ Novos Verbos Http

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

Mudanças que exigem uma nova versão maior:

→ Endpoints removidos ou com assinatura alterada

→ Verbos Http removidos

→ Parâmetros obrigatórios adicionados

→ Parâmetros removidos ou renomeados

→ Propriedades do schema removidas ou renomeadas

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.100 : Subindo versão menor

2.000 -> 3.000 : Subindo versão maior

Quando esse erro acontece, ele apresenta um sumário completo da comparação entre as duas APIs, para ficar claro o que está ok e o que está causando essa quebra

Veja o exemplo abaixo:

Bloco de código
==========================================================================
==                            API CHANGE LOG                            ==
==========================================================================
                                  Filial                                  
--------------------------------------------------------------------------
--                            What's Changed                            --
--------------------------------------------------------------------------
- GET    /Branches
  Return Type:
    - Changed 200 OK
      Media types:
        - Changed application/json
          BackwardCompatible: Broken compatibility
  isBackwardCompatible: false
  - changed: 
    property: items
    isBackwardCompatible: false
    type: array
    isChangeRequired: false
    properties: 
      isBackwardCompatible: false
      - add: propriedade2_6      
      - delete: propriedade2_3

A partir desse relatório, entendemos que em GET /Branches, existiu quebra de compatibilidade no retorno 200 OK.

Isso ocorreu porque a propriedade chamada "propriedade2_3" foi deletada do schema.

Atenção para o valor de "isBackwardCompatible".  Sempre que for "false", aponta aonde ocorreu a quebra de contrato, enquanto, se possuir valor "true", representa uma mudança aceitável, sem comprometer a compatibilidade com a versão menor anterior.

should have anything different from the previous minor version, beside x-totvs

Esse arquivo OpenAPI é referente a uma nova versão minor, porém não existiu nenhuma diferença entre esta e a versão anterior.

Qual a intenção dessa nova versão?

Informações

Apenas mudar informações nas propriedades "x-totvs" não exige subir versão, visto que são apenas para documentação

Endpoints:

shouldn't contain 'post', 'put', 'get' or 'delete' in the URL

Nenhum endpoint pode conter, em sua url (path), métodos HTTP. O path do endpoint deve especificar apenas o recurso que o usuário enviará a requisição.

should contain success responses for all http verbs

Para cada endpoint e método HTTP, deve existir uma response para caso de sucesso (200) na requisição.

should specify 'Id' for all PUT operations

Nenhum endpoint de collection pode aceitar métodos PUT. Todas as operações de método PUT devem ter especificadas um {id}.

should have unique 'operationId'

As propriedades "operationId" de cada um dos endpoints tem que ser únicas. Não podem existir dois endpoints com a mesma operationId.

Schemas:

shouldn't contain 'schemas' definition inside this file

Dentro da especificação OpenAPI não pode conter definição de schemas. Os schemas devem ser declarados em outro arquivo, como especificado no Guia de Implementação de Integrações.

should use external schemas for all requests and responses

Todas as requests e responses de todos os endpoints devem utilizar schemas externos, sendo apenas referenciados dentro do OpenAPI.

should be dereferenced. This means all external references are correct (FilePaths and Object property names)

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.

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

...

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

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 "available" (com essa grafia) para especificar se o produto definido naquele determinado elemento de array está disponível ou nãoser 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.

...