1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Urgente API REST

Discussão em 'Progress 4GL' iniciado por Alexandre, Setembro 28, 2020.

  1. Alexandre

    Alexandre Membro Participativo

    Bom dia Pessoal,

    Alguem poderia me ajudar com um exemplo simples de como conectar numa API via http:


    Para consultar a estrutura da API de Consulta dados deve ser acessado a URL http://localhost:74/swagger/ui/index#!/ConsultaDados/ConsultaDados_ConsultaDados.


    Esta seria a requisição de retorno:
    {
    "tipo": "string",
    "documento": "string",
    "nomeOrigem": "string",
    "opcoesDadosExtracao": {
    "dadosCadastrais": true,
    "resultadoAnalise": true,
    "limiteAdotado": true,
    "limiteTomado": true,
    "endereco": true,
    "bloqueio": true,
    "questionario": true,
    "participacaoEmpresas": true,
    "quadroSocietario": true,
    "metricas": true,
    "percentuais": true,
    "informacaoCadastral": true,
    "grupo": true,
    "ultimasConsultas": 0,
    "detalhamentoMetricas": true,
    "inscricoesEstaduais": true,
    "ramosAtividade": true
    }
    }
  2. af.dums

    af.dums Membro Ativo

    Vê se este exemplo te ajuda:

    Código:
    /*D:\Totvs\Progress\dlc11\gui\netlib\OpenEdge.Net.pl*/
    
    block-level on error undo, throw.
    
    /** Carrega bibliotecas necessarias **/
    using OpenEdge.Net.HTTP.IHttpClientLibrary.
    using OpenEdge.Net.HTTP.ConfigBuilder.
    using OpenEdge.Net.HTTP.ClientBuilder.
    using OpenEdge.Net.HTTP.Credentials.
    using OpenEdge.Net.HTTP.IHttpClient.
    using OpenEdge.Net.HTTP.IHttpRequest.
    using OpenEdge.Net.HTTP.RequestBuilder.
    using OpenEdge.Net.URI.
    using OpenEdge.Net.HTTP.IHttpResponse.
    
    using Progress.Json.ObjectModel.JsonObject.
    using Progress.Json.ObjectModel.JsonArray.
    
    def var oClient        as IHttpClient        no-undo.
    def var oUri           as URI                no-undo.
    def var oReq           as IHttpRequest       no-undo.
    def var oResp          as IHttpResponse      no-undo.
    def var oCreds         as Credentials        no-undo.
           
    def var oJsonRespObj   as JsonObject         no-undo.       
    def var oJsonRespArray as JsonArray          no-undo.
    def var oJsonObj       as JsonObject         no-undo.
    def var oJsonArray     as JsonArray          no-undo.
           
    def var i              as int                no-undo.
    
       
    def temp-table tt-rastreio
        field id as char format "x(60)"
        field nr_hawb as char format "x(60)"
        field data as char format "x(60)"
        field descricao as char format "x(60)"
        field remetente as char format "x(60)"
        field destinatario as char format "x(60)".   
       
    
    /* *************************** GET *************************** */
    /* INI - requisicao web */
    assign oClient   = ClientBuilder:Build():Client       
           oUri      = new URI("http", "") /* URI("metodo", "dominio", "porta") */
           oUri:Path = "".                                       /* URI:Path: demais partes da URL destino */
           
    /* Faz a requisicao utilizando GET */
    oReq  = RequestBuilder:Get(oUri):Request.
    oResp = oClient:Execute(oReq).
    /* FIM - requisicao web */
    
    /* trata o retorno */
    empty temp-table tt-rastreio.
    
    /* valida o tipo de retorno, se for Json processa normalmente */
    if type-of(oResp:Entity, JsonArray) then do:
       
        oJsonRespArray = cast(oResp:Entity, JsonArray).
       
        oJsonArray = oJsonRespArray.       
       
        /* Mostra o total de registros retornados */
        message oJsonArray:length
            view-as alert-box.
       
        /* Converte de Json para Registros na temp-table */
        Loop1:
        do i=1 to oJsonArray:length on error undo, next:
            oJsonObj = oJsonArray:GetJsonObject(i).
           
            create tt-rastreio.
            assign tt-rastreio.id        = string(oJsonObj:GetInt64("id"))
                   tt-rastreio.nr_hawb = oJsonObj:GetCharacter("nr_hawb")
                   tt-rastreio.data  = oJsonObj:GetCharacter("data")
                   tt-rastreio.descricao  = oJsonObj:GetCharacter("descricao")
                   tt-rastreio.remetente  = oJsonObj:GetCharacter("remetente")
                   tt-rastreio.destinatario  = oJsonObj:GetCharacter("destinatario").
        end.   
    end.
    
    /** Abaixo regras de negocio e tratamentos necessarios **/
    for each tt-rastreio no-lock:
        disp tt-rastreio
        with 1 col side-labels width 80.
    end.
    
  3. Alexandre

    Alexandre Membro Participativo

    @af.dums Fala mestre.

    Obrigado pelo retorno.

    Sou bem iniciante nesta parte de programação.
    assign oClient = ClientBuilder:Build():Client
    oUri = new URI("http", "http://localhost:74/swagger/ui/index#!/ConsultaDados/ConsultaDados_ConsultaDados") /* URI("metodo", "dominio", "porta") */
    oUri:path = "". /* URI:path: demais partes da URL destino */

    Poderia me ajudar como preencher esta parte do codigo?

    tentei executar ta dando esse erro:
    O parametro -S deve ser especificado para conexão. (5488)
  4. af.dums

    af.dums Membro Ativo

    tira o http ali de dentro do comando, ficaria assim

    Código:
    oUri = new URI("http", "localhost/swagger/ui/index#!/ConsultaDados/ConsultaDados_ConsultaDados",47) /* URI("metodo", "dominio", "porta") */
    
    Vê se vai funcionar agora... Nunca usei com conexão local, mas creio que dará certo...
  5. Alexandre

    Alexandre Membro Participativo

    @af.dums Bom dia mestre
    Executei essa parte conforme mencionou:
    Mas da esse erro: O que pode ser?
    ---------------------------
    Erro (Press HELP to view stack trace)
    ---------------------------
    O parametro -S deve ser especificado para conexão. (5488)
    ---------------------------
    OK Help
    ---------------------------


    /*D:\Totvs\Progress\dlc11\gui\netlib\OpenEdge.Net.pl*/

    block-level on error undo, throw.

    /** Carrega bibliotecas necessarias **/
    using OpenEdge.Net.HTTP.IHttpClientLibrary.
    using OpenEdge.Net.HTTP.ConfigBuilder.
    using OpenEdge.Net.HTTP.ClientBuilder.
    using OpenEdge.Net.HTTP.Credentials.
    using OpenEdge.Net.HTTP.IHttpClient.
    using OpenEdge.Net.HTTP.IHttpRequest.
    using OpenEdge.Net.HTTP.RequestBuilder.
    using OpenEdge.Net.URI.
    using OpenEdge.Net.HTTP.IHttpResponse.

    using Progress.Json.ObjectModel.JsonObject.
    using Progress.Json.ObjectModel.JsonArray.

    def var oClient as IHttpClient no-undo.
    def var oUri as URI no-undo.
    def var oReq as IHttpRequest no-undo.
    def var oResp as IHttpResponse no-undo.
    def var oCreds as Credentials no-undo.

    def var oJsonRespObj as JsonObject no-undo.
    def var oJsonRespArray as JsonArray no-undo.
    def var oJsonObj as JsonObject no-undo.
    def var oJsonArray as JsonArray no-undo.

    def var i as int no-undo.


    def temp-table tt-rastreio
    field id as char format "x(60)"
    field nr_hawb as char format "x(60)"
    field data as char format "x(60)"
    field descricao as char format "x(60)"
    field remetente as char format "x(60)"
    field destinatario as char format "x(60)".


    /* *************************** GET *************************** */
    /* INI - requisicao web */
    assign oClient = ClientBuilder:Build():Client
    oUri = new URI("http", "localhost/swagger/ui/index#!/ConsultaDados/ConsultaDados_ConsultaDados",47) /* URI("metodo", "dominio", "porta") */
    oUri:path = "". /* URI:path: demais partes da URL destino */

    /* Faz a requisicao utilizando GET */
    oReq = RequestBuilder:Get(oUri):Request.
    oResp = oClient:Execute(oReq).
    /* FIM - requisicao web */

    /* trata o retorno */
    empty temp-table tt-rastreio.

    Arquivos Anexados:

  6. af.dums

    af.dums Membro Ativo

    Qual a versão do seu progress?

Compartilhe esta Página