Translate

sexta-feira, 11 de outubro de 2024

JSON em COBOL no IBM Z: O Holocron das APIs Modernas – JSON GENERATE - Parte III

 

Bellacosa Mainframe e o json em cobol parte iii

JSON em COBOL no IBM Z: O Holocron das APIs Modernas

Parte 3 – JSON GENERATE

Quando o Padawan Aprende a Construir APIs REST com COBOL e Descobre que Também Pode Falar com a Galáxia

Por Bellacosa Mainframe


"JSON PARSE ensina COBOL a escutar. JSON GENERATE ensina COBOL a responder. Um Mestre Jedi precisa dominar ambos."

Mestre Bellacosa Sysprog Jedi


Introdução

Nas jornadas anteriores, o jovem Padawan descobriu algo extraordinário.

Primeiro aprendeu que COBOL moderno fala JSON.

Depois aprendeu a utilizar JSON PARSE.

Agora chega o momento em que ele percebe uma verdade ainda mais impressionante.

COBOL não apenas entende JSON.

COBOL também consegue produzir JSON de forma elegante, otimizada e extremamente rápida.

E isso é feito através de uma instrução quase tão poderosa quanto um sabre de luz recém-montado.

JSON GENERATE


O que é JSON GENERATE?

JSON GENERATE é um serializador.

Seu objetivo é simples.

Transformar estruturas COBOL em texto JSON.

Visualmente.

WORKING STORAGE


↓

JSON GENERATE


↓

JSON


↓

REST API


↓

Aplicativo


↓

Microsserviço

Em outras palavras.

Ele faz exatamente o oposto de JSON PARSE.


Antes do Enterprise COBOL 6

A vida era difícil.

Muitos sistemas faziam:

STRING

"{"

'"id":'

WS-ID

','
'"nome":"'

WS-NOME

'"'

"}"

INTO WS-BUFFER

Problemas.

Vírgulas.

Aspas.

Espaços.

Campos vazios.

Arrays.

Escape.

Tudo manual.


Padawan sofria.


O nascimento de JSON GENERATE

Enterprise COBOL Version 6.

Introduziu.

JSON GENERATE.


Mudou completamente.

Integrações.


Hoje.

Muito utilizado.

6.3

6.4

6.5


Primeiro exemplo

Passo 1

Estrutura COBOL

01 WS-CLIENTE.


05 WS-ID.
PIC 9(5).


05 WS-NOME.
PIC X(30).


05 WS-IDADE.
PIC 999.

Passo 2

JSON Buffer

01 WS-JSON.

PIC X(500).

Passo 3

Popular

MOVE 100

TO WS-ID


MOVE 'Bellacosa'

TO WS-NOME


MOVE 52

TO WS-IDADE

Passo 4

Gerar

JSON GENERATE

WS-JSON


FROM WS-CLIENTE

Passo 5

Display

DISPLAY WS-JSON

Resultado.

{

"id":100,

"nome":"Bellacosa",

"idade":52

}

Pronto.

API pronta.


Como funciona internamente?

Compilador gera.

Serializer.


Percorre.

Estrutura.

Campo.

Por campo.


Converte.

Numéricos.

Strings.

Booleans.

Occurs.


Escreve.

JSON.


Visualmente.

WS-ID


↓

Serializer


↓

"id":100

Memória

JSON continua sendo.

Texto.


Exemplo.

01 WS-JSON.

PIC X(10000).

Buffer.

Grande.


Serializer.

Preenche.


Pouco overhead.


Muito eficiente.


Campos vazios

Problema comum.


Exemplo.

MOVE SPACES

TO WS-NOME

Resultado.

"name":""

Nem sempre desejado.


SUPPRESS

Ferramenta poderosa.


Exemplo conceitual.

JSON GENERATE

WS-JSON


FROM WS-DADOS


SUPPRESS

Campos vazios.

Não aparecem.


Muito usado.

Em APIs.


OMITTED

Outra técnica.


Campo opcional.


Excelente.

Open Banking.

PIX.


NAME OF

Talvez a funcionalidade favorita.

Do Bellacosa.


COBOL.

05 WS-NOME.

JSON desejado.

"customerName"

NAME OF permite.

Mapear.


Muito elegante.


Exemplo API PIX

COBOL.

01 PIX.


05 CHAVE.


05 VALOR.


05 DATA.

JSON.

{

"chave":"abc",


"valor":100,


"data":"2026-06-25"

}

JSON GENERATE.

Faz.

Tudo.


Arrays

Muito útil.


COBOL.

05 TELEFONES.


10 TEL OCCURS 5.

JSON.

"telefones":[


"1111",


"2222"

]

Automático.


Objetos aninhados

COBOL.

01 CLIENTE.


05 DADOS.


10 ID.


10 NOME.



05 ENDERECO.


10 CIDADE.


10 CEP.

Resultado.

{

"cliente":{


"id":1,

"nome":"Bellacosa"


},

"endereco":{


"cidade":"SP"

}

}

Muito elegante.


Null

JSON suporta.


COBOL não.


Precisamos.

Decidir.


Campo vazio.


Campo omitido.


Valor padrão.


Muito importante.


UTF8

Outro cuidado.


JSON.

UTF8.


COBOL.

EBCDIC.


Conversão.

Necessária.


Especialmente.

Acentos.


José.

São Paulo.


Ç.

Ã.


Sempre testar.


Segurança

Poucos lembram.


JSON GENERATE.

Também possui.

Riscos.


Exemplo.

Dados internos.


Senha.


CPF.


Token.


Acidentalmente.

Expostos.


Exemplo.

01 CLIENTE.


05 SENHA.


PIC X(20).

JSON GENERATE.

Sem SUPPRESS.


API.

Expõe.

Senha.


Muito perigoso.


Boa prática

Criar.

Estrutura.

Específica.

API.


Nunca.

Gerar.

Diretamente.

Working Storage.

Inteira.


Pretty JSON

COBOL.

Não gera.

JSON bonito.


Compacto.


Mais eficiente.


Consumidor.

Pode formatar.


Performance

Excelente.


Serializer.

Nativo.


Compilado.


Muito rápido.


Melhor.

Que STRING.


Melhor.

Que montar.

Na mão.


Benchmark aproximado

Manual.

100%


JSON GENERATE.

Muito menor.

CPU.


Menos bugs.


Mais manutenção.


Curiosidade

Muitos aplicativos bancários.

Recebem.

JSON.

Gerado.

Por COBOL.


Usuário.

Nunca percebe.


Abre app.


Consulta saldo.


Recebe.

JSON.


Origem.

COBOL.

No z17.


APIs modernas

JSON GENERATE é usado.

Em.

z/OS Connect

CICS

Liberty

MQ

Kafka

OpenShift

Cloud Pak


Praticamente.

Todo lugar.


Bellacosa Best Practices

Sempre

Criar DTO.

Separado.


Sempre

Usar SUPPRESS.


Sempre

Validar UTF8.


Sempre

Versionar JSON.


Sempre

Documentar.

Swagger.

OpenAPI.


Nunca

Expor.

Campos internos.


Nunca

Montar.

JSON.

Na mão.

Com STRING.


Comparação

TécnicaRecomendada
STRINGNão
UNSTRINGNão
INSPECTNão
Parser próprioEvitar
JSON GENERATESim
JSON PARSESim

O Conselho do Mestre Bellacosa

Durante muitos anos, o programador COBOL era visto como alguém responsável apenas por arquivos sequenciais, relatórios batch e transações CICS.

JSON GENERATE mudou essa percepção.

Ele permitiu que sistemas escritos décadas atrás começassem a responder chamadas REST, conversar com aplicativos móveis, participar do Open Finance e integrar-se naturalmente a arquiteturas modernas baseadas em APIs.

Talvez essa seja uma das maiores virtudes do Enterprise COBOL.

Ele não exige que o desenvolvedor abandone tudo aquilo que aprendeu.

Ele simplesmente acrescenta novas habilidades.

E diz ao Padawan:

Continue usando seus níveis 01, 05 e 10.

Continue escrevendo programas robustos.

Continue confiando na estabilidade do IBM Z.

Eu apenas ensinarei seu código a responder em uma linguagem compreendida por praticamente toda a galáxia digital.


Continua na Parte 4

JSON Jedi Master – z/OS Connect, MQ, Kafka, OpenShift, APIs de Alto Desempenho, Segurança OWASP e Técnicas Avançadas para o Mestre Bellacosa do IBM Z.

Sem comentários:

Enviar um comentário