Translate

Mostrar mensagens com a etiqueta JSON PARSE. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta JSON PARSE. Mostrar todas as mensagens

sábado, 7 de setembro de 2024

JSON em COBOL no IBM Z: O Holocron das APIs Modernas – JSON PARSE - Parte II

 

Bellacosa Mainframe e o json no cobol parte II

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

Parte 2 – JSON PARSE

Quando o Padawan Aprende a Transformar Texto em Estruturas COBOL

Por Bellacosa Mainframe


"JSON é apenas texto. O verdadeiro poder está em fazer COBOL compreender esse texto como se fosse uma estrutura nativa do IBM Z."

Mestre Bellacosa Sysprog Jedi


Introdução

Na Parte 1, o Padawan descobriu algo surpreendente.

COBOL moderno fala JSON.

Aprendemos:

  • JSON GENERATE

  • UTF-8

  • CCSID

  • Enterprise COBOL 6.x

  • APIs REST

  • JSON em memória

  • Segurança básica

Agora chegamos ao momento em que o programa COBOL deixa de apenas produzir JSON.

Ele começa a entender JSON.

E isso acontece através de uma instrução quase mágica.

JSON PARSE


O que é JSON PARSE?

JSON PARSE é o tradutor universal.

Ele recebe.

Texto.

Transforma.

Em estruturas COBOL.


Visualmente.

JSON


↓

JSON PARSE


↓

WORKING STORAGE


↓

Programa COBOL

Exemplo.

Recebemos.

{
"id":100,

"nome":"Bellacosa",

"idade":52
}

COBOL deseja.

01 CLIENTE.

05 ID.

PIC 9(5).


05 NOME.

PIC X(30).


05 IDADE.

PIC 999.

JSON PARSE faz isso.

Automaticamente.


Quando surgiu?

IBM introduziu.

JSON PARSE

Enterprise COBOL

Version 6.


Mais utilizado hoje.

6.3

6.4

6.5


Mudou completamente.

Integrações.


Primeiro programa JSON PARSE

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

Buffer JSON

01 WS-JSON.

PIC X(500).

Passo 3

Popular

MOVE

'{"id":100,

"nome":"Bellacosa",

"idade":52}'


TO WS-JSON

Passo 4

Parse

JSON PARSE

WS-JSON

INTO WS-CLIENTE

Passo 5

Display

DISPLAY WS-ID.


DISPLAY WS-NOME.


DISPLAY WS-IDADE.

Resultado.

100


Bellacosa


52

Pronto.

JSON virou COBOL.


O que acontece internamente?

Compilador cria.

Parser interno.


Percorre.

Caractere.

Por caractere.


Reconhece.

Chaves.

Aspas.

Números.

Vetores.


Mapeia.

Campos.


Visualmente.

{


"id"



100



}


↓

COBOL


ID=100

Como funciona na memória?

JSON continua sendo texto.


Exemplo.

Buffer


500 bytes

Parser lê.


Move dados.


Para.

Working Storage.


Resultado.

WS-ID


100



WS-NOME


Bellacosa

Sem ponteiros.

Sem árvore.

Sem DOM.


Muito eficiente.


Objetos Aninhados

JSON suporta.

Estruturas.

Dentro.

De estruturas.


Exemplo.

{

"cliente":{

"id":1,

"nome":"Bellacosa"

}

}

COBOL.

01 CLIENTE.


05 DADOS.


10 ID.


10 NOME.

Muito elegante.


Arrays

Chegamos.

Ao lado divertido.


JSON.

{

"telefones":[

"1111",

"2222"

]

}

COBOL.

05 TELEFONES.

10 TEL OCCURS 10.


15 NUMERO.


PIC X(20).

Parser.

Preenche.


COUNT IN

Muito útil.


Exemplo.

JSON PARSE

WS-JSON


INTO WS-DADOS


COUNT IN WS-CONTADOR

Retorna.

Quantidade.

Itens.


Excelente.

Para.

Arrays.


ON EXCEPTION

Fundamental.

Nunca esquecer.


Exemplo.

JSON PARSE

WS-JSON


INTO WS-CLI


ON EXCEPTION


DISPLAY 'ERRO'

Padawan.

Sempre use.


Exemplo inválido

JSON.

{


"id":100


"nome":"Bellacosa"

Aspa.

Faltando.


Parser.

Falha.


ON EXCEPTION.

Executado.


JSON Malicioso

Poucos falam.

Mas existe.


Payload.

Gigante.


Exemplo.

50 MB.


Consome.

CPU.


Memória.


Tempo.


DoS.


Negação.

Serviço.


Boa prática

Validar.

Tamanho.


Exemplo.

IF WS-LEN > 100000

DISPLAY 'ERRO'

Muito recomendado.


Nomes diferentes

JSON.

Pode vir.

{

"customer_name":"Bellacosa"

}

COBOL.

05 WS-NOME.

Problema.


Precisamos.

Mapear.


Enterprise COBOL possui.

NAME OF.

SUPPRESS.


Falaremos.

Parte 3.


UTF8

Grande inimigo.


JSON.

UTF8.


COBOL.

EBCDIC.


José.

Pode quebrar.


Ç.

Ã.

É.


Atenção.

Sempre.


JSON NULL

JSON.

{


"nome":null
}

COBOL.

Não possui.

Null textual.


Precisamos.

Tratar.


Muito importante.


Performance

Excelente.


JSON PARSE.

É compilado.


Muito rápido.


Melhor.

Que parser.

Manual.


Evite.

UNSTRING


INSPECT


STRING

Desnecessário.


JSON PARSE.

Resolve.


Curiosidades

Muitos bancos.

Recebem.

Milhões.

JSON.

Por dia.


Aplicativos.

PIX.

Cartão.

Open Finance.


Tudo passa.

Por.

JSON.


E em muitos casos.

Existe.

COBOL.

No fim.

Da cadeia.


Debug

Exemplo.

DISPLAY WS-JSON

Muito útil.


Ou.

IBM Debug Tool.


Fault Analyzer.


Dump.


Quando usar?

Excelente.

REST

MQ

Kafka

zOS Connect

Mobile

Open Banking

PIX

Cloud


Quando evitar?

Arquivos internos.


VSAM.


Relatórios.


Batch tradicional.


Bellacosa Best Practices

Sempre

Use ON EXCEPTION


Sempre

Validar tamanho


Sempre

Testar UTF8


Sempre

Documentar JSON


Sempre

Versionar APIs


O Conselho do Mestre Bellacosa

JSON PARSE é provavelmente uma das maiores evoluções já incorporadas ao Enterprise COBOL.

Ele permite que um programa escrito há vinte ou trinta anos compreenda payloads produzidos por smartphones, microsserviços, plataformas OpenShift e aplicações espalhadas pela Internet.

O jovem Padawan deve perceber uma verdade importante.

JSON continua sendo apenas texto.

Mas JSON PARSE transforma esse texto em algo que COBOL entende profundamente.

Estruturas.

Campos.

Vetores.

Níveis.

OCCURS.

Variáveis.

E talvez essa seja a maior beleza do IBM Z moderno.

Ele não exige que o desenvolvedor abandone décadas de conhecimento.

Ele apenas oferece novas ferramentas.

E diz:

Continue programando em COBOL.

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

Continue confiando em sua experiência.

Eu apenas ensinarei ao seu programa a compreender uma nova linguagem falada por toda a galáxia digital.


Continua na Parte 3

JSON GENERATE – Quando o Padawan Aprende a Construir APIs REST com COBOL, Criar Payloads Elegantes, Controlar Campos, Suprimir Dados e Falar com Microsserviços do Futuro.


quinta-feira, 18 de julho de 2024

JSON em COBOL no IBM Z: O Holocron das APIs Modernas – O Despertar do JSON - Parte I

 

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.


Continua na Parte 2

JSON PARSE – Transformando Texto em Estruturas COBOL: Arrays, Objetos Aninhados, OCCURS, Tratamento de Erros e o Lado Sombrio dos Payloads Maliciosos.