As ferramentas de API tiveram um quase acerto doloroso: o OpenAPI usava objetos de esquema semelhantes a JSON, mas eles não eram totalmente JSON Schema. Validadores, geradores de código e ferramentas de documentação precisavam aprender diferenças sutis, de modo que o mesmo contrato de API podia significar coisas diferentes em pilhas diferentes.
O movimento elegante não foi criar outra linguagem exclusiva para API. O JSON Schema fez do próprio esquema um tipo de mídia JSON, com vocabulários e metaesquemas que declaram quais palavras-chave e comportamentos estão em jogo. O OpenAPI 3.1 pôde então dizer: use o JSON Schema draft 2020-12, não um sósia.
O resultado foi um padrão que venceu ao se tornar a gramática por baixo de outros padrões. O OpenAPI chamou sua versão 3.1 de 100% compatível com o draft mais recente do JSON Schema, enquanto o JSON Schema ganhou um modelo de extensão estável para validação, geração de código, UI e documentação.
Tornar os esquemas vocabulários extensíveis
O esquema permaneceu JSON comum, então os desenvolvedores podiam lê-lo, compará-lo por diff e gerá-lo com ferramentas existentes.
Os vocabulários deram nomes e limites às extensões em vez de fazer cada plataforma inventar palavras-chave privadas.
A adoção do OpenAPI puxou o JSON Schema para os fluxos de trabalho de documentação de API, validação e geração de código de uma só vez.
O Draft 2020-12 deu aos implementadores um alvo estável, incluindo dialetos e metaesquemas.
Um formato se espalha quando as extensões são de primeira classe e testáveis, não escondidas em prosa ou convenções de fornecedores.
O OpenAPI 3.1 foi lançado em 18 de fevereiro de 2021 com compatibilidade total com o JSON Schema draft 2020-12. Isso fez do JSON Schema a camada de contrato compartilhada para um grande ecossistema de ferramentas de API, e não apenas um formato de validador autônomo.
CONFIRA AS EVIDÊNCIAS
As fontes
- JSON Schema: A Media Type for Describing JSON Documents JSON Schema · json-schema.org
- OpenAPI Specification 3.1.0 Released OpenAPI Initiative · openapis.org ·