| Bellacosa Mainframe e o json no cobol parte I |
JSON em COBOL no IBM Z: O Holocron das APIs Modernas
Parte 1 – O Despertar do JSON
Quando o Padawan Descobre que COBOL Pode Falar a Linguagem das APIs
Por Bellacosa Mainframe
"Por décadas, COBOL falou VSAM, DB2, IMS e MQ. Hoje ele também conversa com APIs, microsserviços e nuvens distantes. O idioma escolhido pela galáxia moderna chama-se JSON."
Mestre Bellacosa Sysprog Jedi
Introdução
Durante muitos anos, a vida do desenvolvedor COBOL era relativamente previsível.
Ele acordava.
Abria o ISPF.
Editava um programa.
Fazia um READ em um VSAM.
Consultava um DB2.
Chamava um CICS.
Enviava uma mensagem MQ.
Executava o JOB.
Analisava o SDSF.
E ia tomar café.
Então, por volta da década de 2010, uma nova criatura começou a aparecer nas especificações técnicas.
Ela vinha acompanhada de nomes estranhos.
REST.
OpenAPI.
Swagger.
Microservices.
Kubernetes.
OpenShift.
APIs.
Mobile.
Cloud.
E no meio de tudo isso, um pequeno formato textual se tornou praticamente o idioma universal da integração moderna.
Seu nome era:
JSON
(JavaScript Object Notation)
E então o jovem Padawan COBOL perguntou:
Mestre...
Quer dizer que meu programa COBOL de 30 anos pode conversar com um aplicativo Android?
Pode responder uma API REST?
Pode enviar dados para um microsserviço em OpenShift?
Pode participar de uma arquitetura moderna?
O mestre sorri.
Olha para o IBM z17.
E responde:
Sim.
E o idioma utilizado para essa conversa provavelmente será JSON.
O que é JSON?
JSON significa:
JavaScript Object Notation.
Mas não se deixe enganar pelo nome.
Hoje JSON pertence ao mundo inteiro.
Não é apenas JavaScript.
É utilizado por:
COBOL
Java
Python
Go
Rust
Node.js
C#
Kotlin
Swift
APIs REST
OpenShift
Kafka
IBM MQ
z/OS Connect
Praticamente tudo.
Exemplo simples
Um cliente.
Em COBOL.
Temos:
01 WS-CLIENTE.
05 WS-ID.
PIC 9(5).
05 WS-NOME.
PIC X(30).
05 WS-IDADE.
PIC 999.
Em JSON.
{
"id":100,
"nome":"Bellacosa",
"idade":52
}
Mesmo dado.
Representações diferentes.
Por que JSON venceu XML?
Muitos veteranos perguntam:
Mestre...
Mas XML não fazia isso antes?
Sim.
Fazia.
E ainda faz.
Mas JSON trouxe algumas vantagens.
XML
<cliente>
<id>100</id>
<nome>Bellacosa</nome>
</cliente>
JSON
{
"id":100,
"nome":"Bellacosa"
}
Menor.
Mais leve.
Mais rápido.
Mais amigável.
JSON chegou tarde ao COBOL?
Sim.
Durante muitos anos, programadores precisavam utilizar:
Parsers.
Ferramentas externas.
Java.
C.
SAX.
DOM.
Bibliotecas proprietárias.
Era desagradável.
Quando surgiu suporte nativo?
IBM introduziu suporte moderno em:
Enterprise COBOL V6
Especialmente.
COBOL 6.1
6.2
6.3
6.4
6.5
Duas instruções mudaram tudo.
JSON PARSE
JSON GENERATE
Essas duas instruções transformaram COBOL em um cidadão de primeira classe no universo das APIs.
O que é JSON PARSE?
É o tradutor.
Recebe texto.
Produz estruturas COBOL.
Visualmente.
JSON
↓
JSON PARSE
↓
WORKING STORAGE
O que é JSON GENERATE?
Faz o contrário.
WORKING STORAGE
↓
JSON GENERATE
↓
Texto JSON
Primeiro exemplo do Padawan
Passo 1
Criar estrutura.
01 WS-CLIENTE.
05 WS-ID.
PIC 9(5).
05 WS-NOME.
PIC X(30).
05 WS-IDADE.
PIC 999.
Passo 2
Criar buffer.
01 WS-JSON.
PIC X(200).
Passo 3
Popular dados.
MOVE 100
TO WS-ID
MOVE 'BELLACOSA'
TO WS-NOME
MOVE 52
TO WS-IDADE
Passo 4
Gerar JSON.
JSON GENERATE WS-JSON
FROM WS-CLIENTE
Passo 5
Display.
DISPLAY WS-JSON
Resultado.
{
"id":100,
"nome":"BELLACOSA",
"idade":52
}
Pronto.
COBOL falando JSON.
Como funciona internamente?
Aqui começa a magia.
O compilador gera código otimizado.
Percorre estrutura COBOL.
Mapeia campos.
Converte.
Monta texto.
Tudo automaticamente.
Visualmente.
WORKING STORAGE
↓
Field Scanner
↓
Serializer
↓
UTF-8
↓
JSON Buffer
Como JSON fica na memória?
JSON é texto.
Normalmente.
UTF-8.
Exemplo.
{"nome":"Bellacosa"}
Na memória.
7B
22
6E
6F
6D
65
Bytes.
CCSID
Muito importante.
Padawan frequentemente esquece.
IBM Z trabalha com:
EBCDIC.
JSON trabalha com:
UTF-8.
Complicação.
Exemplo.
COBOL.
EBCDIC
API.
UTF8
Conversão necessária.
Exemplo
Nome.
José
UTF8.
Dois bytes.
EBCDIC.
Outro código.
Pode quebrar.
Segurança
Muito importante.
JSON pode ser perigoso.
Exemplo.
Payload enorme.
{
"clientes":[
100000 itens
]
}
Pode consumir.
CPU.
Memória.
Tempo.
Boa prática.
Validar tamanho.
JSON Injection
Também existe.
Nunca confiar.
Em entrada.
Externa.
Sempre validar.
Arrays
JSON suporta.
{
"clientes":[
{"id":1},
{"id":2}
]
}
COBOL.
OCCURS.
Excelente integração.
Objetos aninhados
{
"cliente":{
"id":1,
"endereco":{
"cidade":"SP"
}
}
}
COBOL.
Níveis.
Muito elegante.
Curiosidade
JSON PARSE.
Não cria ponteiros.
Não cria DOM.
Não cria árvore.
Preenche estruturas COBOL.
Diretamente.
Extremamente eficiente.
Performance
Muito boa.
JSON GENERATE.
É rápido.
Muito mais rápido.
Do que escrever.
String manualmente.
Exemplo ruim.
STRING
'{'
'"nome":"'
WS-NOME
'"'
'}'
Terrível.
JSON GENERATE.
Melhor.
Quando usar?
Excelente para.
APIs.
REST.
MQ.
Kafka.
OpenShift.
Mobile.
Cloud.
Microsserviços.
Quando evitar?
Arquivos internos.
VSAM.
Batch puro.
Relatórios.
Curiosidade Bellacosa
Muitos programas COBOL modernos já trabalham com JSON diariamente.
E boa parte dos usuários finais jamais imagina.
Ao abrir um aplicativo bancário.
Consultar saldo.
Fazer PIX.
Solicitar empréstimo.
Atualizar cadastro.
Frequentemente existe um programa COBOL recebendo JSON silenciosamente em algum lugar do IBM Z.
O Conselho do Mestre Bellacosa
Durante décadas, COBOL foi visto como uma linguagem presa a cartões perfurados, arquivos sequenciais e relatórios impressos.
JSON mudou essa percepção.
JSON permitiu que programas escritos há décadas conversassem com aplicações móveis, microsserviços em OpenShift, APIs em nuvem e plataformas digitais espalhadas pela galáxia tecnológica.
E talvez essa seja a maior lição desta primeira jornada.
COBOL não precisou deixar de ser COBOL.
Não precisou abandonar sua robustez.
Não precisou reescrever milhões de linhas.
Ele simplesmente aprendeu um novo idioma.
E hoje pode dizer:
Eu ainda sou COBOL.
Ainda processo milhões de transações por segundo.
Ainda executo no IBM Z.
Mas agora também falo JSON.
E posso conversar com praticamente qualquer sistema da galáxia.
Sem comentários:
Enviar um comentário