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

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[RESOLVIDO] Webservice Metod REST

Discussão em 'EMS , HCM e Totvs 11' iniciado por wsartorelli, Junho 11, 2018.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. wsartorelli

    wsartorelli Membro Participativo

    Pessoal, boa tarde, preciso fazer acesso a um sistema na nuvem via Webservice, com o método REST,
    alguém tem algo referente a esse tipo de método? Como faço para me conectar? Existe algum fonte de exemplo?
    Aguardo auxilio.
    Obrigado.
    reissobr curtiu isso.
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    pelo que eu me lembro, o REST é quando vc coloca a URL e na sequencia coloca uma interrogação e segue os campos que quer mandar.
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    REST depende muito da forma de requisição:
    • GET: Requisita um representação do recurso especificado (O mesmo recurso pode ter várias representações, ao exemplo de serviços que retornam XML e JSON).
    • HEAD: Retorna os cabeçalhos de uma resposta (sem o corpo contendo o recurso)
    • POST: Envia uma entidade e requisita que o servidor aceita-a como subordinada do recurso identificado pela URI.
    • PUT: Requisita que um entidade seja armazenada embaixo da URI fornecida. Se a URI se refere a um recurso que já existe, ele é modificado; se a URI não aponta para um recurso existente, então o servidor pode criar o recurso com essa URI.
    • DELETE: Apaga o recurso especificado.
    • TRACE: Ecoa de volta a requisição recebida para que o cliente veja se houveram mudanças e adições feitas por servidores intermediários.
    • OPTIONS: Retorna os métodos HTTP que o servidor suporta para a URL especificada.
    • CONNECT: Converte a requisição de conexão para um túnel TCP/IP transparente, usualmente para facilitar comunicação criptografada com SSL (HTTPS) através de um proxy HTTP não criptografado.
    • PATCH: Usado para aplicar modificações parciais a um recurso.

    No caso do Get seria desse tipo que o bootstrapmaster falou, só passar parâmetros

    Fora isso, todo método REST retorna JSON se for uma WebAPI ou XML se for webservice tradicional SOAP (Tipo da receita federal).

    O primeiro passo é pegar a documentação da API que se quer acessar, o resto é implementação do código.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

  6. wsartorelli

    wsartorelli Membro Participativo

    Bom dia, obrigado pela ajuda ate o momento.
    Nesse método REST tenho que fazer a requisição POST para obter um Token e uma assinatura, para depois utilizar esse Token e assinatura em outra requisição POST (complicado).
    Anexo o código em JAVA que preciso converter para Progress ABL 11.7. Esse código anexo mostra como passar e receber as informações, disso em Progress 11.7.
    Já fiz vários programas utilizando o SOAP mas REST é uma novidade para mim e pela urgência que tenho, solicito auxilio do grupo.
    Aguardo ajuda.

    Obrigado.

    Mandei o arquivo, mas abaixo esta o codigo que preciso converter para Progress 11:

    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;

    namespace Sample
    {
    class Program
    {
    static void Main(string[] args)
    {
    var uri = new Uri(@"https://qa01.csod.com/services/api/sts/Session?userName=soapadmin&alias=soapadmin1");
    var request = (HttpWebRequest)WebRequest.Create(uri);

    var apiId = "wa2vbauugyvt";
    var apiSecret = "tDCBh1b8tDO8lGVvieNqVCFUZgsPm1OoxYW4OM3WgEt21BSBpICULBe9sYaNZAEoRLVe49Fply/zgjKBP6V4gg==";

    request.Headers.Add("x-csod-date", DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.000"));
    request.Headers.Add("x-csod-api-key", apiId);
    request.Method = "POST";

    var stringToSign = ConstructStringToSign(request.Method, request.Headers, uri.AbsolutePath);
    var sig = SignString512(stringToSign, apiSecret);
    request.Headers.Add("x-csod-signature", sig);

    request.ContentType = "text/xml";
    request.Timeout = 999999;
    request.ContentLength = 0;

    request.Accept = "text/xml";

    using (var response = request.GetResponse())
    {
    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    {
    string responseFromServer = reader.ReadToEnd();
    Console.WriteLine(responseFromServer);
    }
    }

    Console.WriteLine();
    Console.WriteLine("Enter To Exit");
    Console.ReadLine();
    }
    public static string ConstructStringToSign(string httpMethod, NameValueCollection headers, string pathAndQuery)
    {
    StringBuilder stringToSign = new StringBuilder();
    var httpVerb = httpMethod.Trim() + "\n";
    var csodHeaders = headers.Cast<string>().Where(w => w.StartsWith("x-csod-"))
    .Where(w => w != "x-csod-signature")
    .Distinct()
    .OrderBy(s => s)
    .Aggregate(string.Empty, (a, l) => a + l.ToLower().Trim() + ":" + headers[l].Trim() + "\n");
    stringToSign.Append(httpVerb);
    stringToSign.Append(csodHeaders);
    stringToSign.Append(pathAndQuery);
    return stringToSign.ToString();
    }
    public static string SignString512(string stringToSign, string secretKey)
    {
    byte[] secretkeyBytes = Convert.FromBase64String(secretKey);
    byte[] inputBytes = Encoding.UTF8.GetBytes(stringToSign);
    using (var hmac = new HMACSHA512(secretkeyBytes))
    {
    byte[] hashValue = hmac.ComputeHash(inputBytes);
    return System.Convert.ToBase64String(hashValue);
    }
    }
    }
    }

    Arquivos Anexados:

Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página