_Blog_

Blog

Consumir WebServices Rest utilizando Progress? Yes, We Can!

Tags:, , , , , , , , Artigos, Destaque
featured image

Progress 4GL, OpenEdge, ABL e assim por diante. Quem trabalha ou algum dia já trabalhou com a Progress deve ter ouvido ou visto a linguagem ser chamada por algum desses nomes, que não estão de todo errados. Ela é uma linguagem inicialmente procedural, e muitos programadores ainda a utilizam até hoje apenas neste modo. Mas a linguagem foi crescendo e amadurecendo, adquirindo conceitos como orientação objeto, classes e os próprios objetos, sendo também integrada a outras ferramentas.

Toda essa evolução da linguagem hoje nos possibilita utilizá-la em conjunto com bibliotecas do próprio sistema operacional, como as bibliotecas.net no Windows e consumir ou expor WebServices utilizando Progress.

SAIBA MAIS: INTEGRAÇÃO ENTRE SISTEMAS AUMENTA PRODUTIVIDADE DE EMPRESAS

Mas afinal, o que são WebServices? De modo bem resumido, WebServices são funções ou serviços expostos através da internet e que usualmente tem por função integrar diferentes sistemas possivelmente em diferentes linguagens através de uma linguagem comum. No caso de WebServices Rest, utiliza-se Json.

Se você quiser estudar mais sobre WebServices, eu recomendo o artigo do DesenvolvimentoParaWeb e do Matera também.

Agora, vamos ao que interessa: como consumir WebServices utilizando Progress? Para que isso seja possível, utilizaremos as bibliotecas OpenEdge.Net.HTTP, OpenEdge.Net.URI e Progress.Json.ObjectModel. Essas bibliotecas estão disponíveis a partir da versão 11 do Progress, mas preferencialmente deve-se utilizá-las a partir da versão 11.5. Todas estão disponíveis na instalação em Linux e Windows. Além disso, para este desenvolvimento será utilizado o Progress Developer Studio, mas também pode-se usar qualquer outro editor de sua preferência, como o editor clássico do Progress ou o Piew.

Com todas as ferramentas em mãos, vamos ao nosso cenário. Temos o cliente que será construído em Progress e o WebService que disponibiliza um recurso de postagens, ao estilo das postagens do Twitter. O recurso pode ser chamado por GET ou POST, para consulta ou inclusão, respectivamente. O cenário pode ser visto na figura abaixo que mostra o cenário 1.

consumir webservices rest utilizando Progress1

Vamos começar com algo mais simples, criar uma requisição GET para que possamos consultar todas as postagens. Isso é possível através da consulta em jsonplaceholder.typicode.com/posts utilizando o método GET do HTTP, que retorna uma lista com vários objetos Json.

consumir webservices rest utilizando Progress2

Primeiro criamos uma temp-table que espelhe o modelo do Json retornado. Assim podemos guardar cada objeto da lista como um registro para depois aplicarmos as regras de negócio necessárias.

consumir webservices rest utilizando Progress3

Depois criamos nossos objetos para abrir a conexão com o servidor e consumir o serviço. Criamos e instanciamos o objeto oClient, que é quem vai tratar a requisição e o retorno HTTP; oURI contém o destino da requisição; oReq e oResp contêm os dados da requisição e da resposta, respectivamente.

consumir webservices rest utilizando Progress4

Depois de executarmos a requisição e armazenarmos a resposta, precisamos verificar se o retorno veio no padrão esperado e, em caso afirmativo, passar o retorno que veio em Json para a temp-table que criamos anteriormente.

consumir webservices rest utilizando Progress5

Como recebemos uma lista Json no retorno, é necessário percorrer cada um dos seus objetos para que seja possível extrair todos os dados. Isso é feito no Loop1, que vai de 1 até o fim da lista. O método GetJsonObject nos permite pegar apenas um objeto da lista, guardá-lo em oJsonObj e, a partir deste objeto, extrair cada um de seus atributos e gravá-los nos respectivos campos da temp.

Para finalizar esta etapa, mostramos os registros retornados na temp com o clássico “disp”, mas poderíamos, a partir daqui, aplicar qualquer regra de negócio ou tratamento como faríamos com qualquer outra temp-table.

consumir webservices rest utilizando Progress6

Certo, a primeira etapa foi concluída. Mas como fazer quando o acesso é feito apenas por POST? Como enviar dados em conjunto com a requisição? Comparando a forma de consumir recursos por GET ou POST, a diferença é pequena, apenas é necessário mudar o método chamado na hora de montar a requisição e pode-se incluir dados adicionais nessa chamada, o que permite enviar parâmetros ao recurso solicitado.

BAIXE AGORA: VANTAGENS DE UM SOFTWARE PERSONALIZADO

Prosseguindo com o exemplo, vamos construir uma nova requisição utilizando o método POST do HTTP para incluir uma nova postagem utilizando o WebService. O recurso em questão pertence ao mesmo domínio, permite enviar os dados de uma postagem e retornar os dados enviados mais o ID da postagem, conforme modelo abaixo:

consumir webservices rest utilizando Progress7

Como a única diferença entre o retorno dos dois recursos é que, enquanto o GET retorna uma lista com várias postagens, o POST retorna apenas a postagem incluída, utilizaremos a mesma temp-table para armazenar o retorno. A requisição será feita através do método Post da classe RequestBuilder, passando a URI destino e objeto Json com os parâmetros para postagem.

consumir webservices rest utilizando Progress8

Depois de executarmos a requisição, recebemos a resposta e a tratamos para garantir que o retorno está conforme o modelo esperado. Em seguida, o convertemos em um objeto Json, pois não é esperado uma lista desta vez, gravamos ele em nossa temp e o mostramos com o comando disp.

consumir webservices rest utilizando Progress9

Em um cenário real, após recebermos o retorno e o gravarmos na temp-table, seria possível aplicar quaisquer regras ou tratamentos necessários, conforme os requisitos de cada demanda.

Resumindo então, neste artigo tratamos de comunicar aplicações Progress com WebServices, sejam eles quais forem. Foram apresentados exemplos utilizando os métodos GET e POST do protocolo HTTP e consumindo os dados através do padrão Json. O código fonte completo pode ser acessado no GitHub e mais informações sobre as bibliotecas Progress utilizadas podem ser encontradas através dos links abaixo.

Bibliotecas Progress Openedge:

OpenEdge.Net.HTTP

OpenEdge.Net.URI

Progress.Json.ObjectModel

Orientações sobre WebServices e APIs:

DesenvolvimentoParaWeb

Matera

Fontes:

GitHub

*Artigo desenvolvido por Rafael Alves, programador da Kbase

Related Posts

  • javascript atualizações ES2021
  • sistema pdv paquetá
  • atendimento online