de retorno da chamada deste servico seria algo como:{ "access_token":"54f03097-e105-4bfd-9ff4-eba57KM6hSB39vFRlA7a4iAE", "scope":"FullControl", "refresh_token":"", "user_guid":"985ee5fe-8d5c-4008-8a0b-050beb6bddb0"}A estrategia do exemplo e armazenar o Token na websession, para em seguida obte-lo quando necessario.2) Inserindo registrosConsiderando uma transacao Empresa que foi definida como REST.Poderemos realizar operacao de insercao de registros por meio do servico, que se encontrara disponibilizado na URL a seguir, observe que se deve incluir um /rest e o /Empresa e a transacao, que nao precisamos ascrescentar a extensao aspx (se for .Net)localhost/Kb.NetEnvironment/rest/EmpresaA sequencia de acoes para se chamar este servico REST e a seguinte:Definir o caminho ao servicoIncluir no Header da mensagem o Token do GAMIncluir no corpo da mensagem o registro a ser inseridoDefinir a chave primaria do registro a ser inseridoExecutar o POSTA primeira acao e a operacao de conexao ao servidor, que definimos em uma sub rotina chamada Host. Observe que e necessario passar o Token obtido no login anteriormente apresentado, incluindo-o no cabecalho da chamada.Sub 'Host' &httpclient.Host = 'localhost/' &httpclient.Port = 80 &httpclient.BaseUrl = '/ Kb.NetEnvironment/rest/' &httpclient.AddHeader('Authorization','OAuth ' + &websession.get('TOKEN'))EndSubEm seguida, sera necessario incluir o registro a ser inserido no corpo da mensagem, atraves do &httpclient.AddString(&EmpresaSDT.ToJson()). Desta forma, deveremos ter um objeto EmpresaSDT para definir a estrutura da informacao.Falaremos do gx_md5_hash logo abaixo.Um detalhe importante na chamada e a passagem do Id do registro, no caso EmpresaId, que para o insert, deve ser zero. Ou seja, temos como enviar parametros para a regra Parm do objeto.O Execute no metodo POST realiza a chamada ao servico.Event 'Insert' do 'Host' &httpclient.AddHeader('content-type','application/json') &httpclient.AddString(&EmpresaSDT.ToJson()) &querystring='Empresa' + "/" + &EmpresaSDT.EmpresaId.ToString() &httpclient.Execute('POST', &querystring) &StatusCode=201 do 'Message'EndeventPara tratar o resultado temos o codigo de retorno 201 sendo o StatusCode correto para a operacao, ou seja, se acontecer o registro foi inserido corretamente.Sub 'Message' if &httpclient.StatusCode=&StatusCode msg("Informacao atualizada") else msg("Ocorreu um erro.." + &httpclient.ToString()) endif EndSub2) Atualizando registrosA atualizacao e muito semelhante ao processo de insercao, com apenas um pequeno detalhe, sera necessario obter primeiro o registro que se encontra na tabela. Isto e feito para que o Genexus realize o controle de concorrencia no processo de atualizacao.Sendo assim, a carga do registro deve ser feita por uma chamada GET ao servico, a seguir um exemplo.Event 'get' do 'Host' &httpclient.AddHeader('content-type','application/json') &querystring='Empresa' + "/" + &EmpresaSDT.EmpresaId.ToString() &httpclient.Execute('GET',&querystring) &EmpresaSDT.FromJson(&httpclient.ToString()) &StatusCode=200 do 'Message'EndeventO registro deve ser manipulado a partir de uma variavel SDT, e em seguida sua atualizacao deve ser enviada ao servidor chamando-se um metodo PUT, conforme o modelo a seguir. Em todo processo sera necessario informar a chave primaria do registro.Event 'update' if &EmpresaSDT.gx_md5_hash.IsEmpty() msg('Do a get first') else do 'Host' &json=&EmpresaSDT.ToJson() &httpclient.AddHeader('content-type','application/json') &httpclient.AddString(&json) &querystring='Empresa' + "/" + &EmpresaSDT.EmpresaId.ToString() &httpclient.Execute('PUT', &querystring) &StatusCode=200 do 'Message' endifEndEventO detalhe importante neste processo e a necessidade de se armazenar um codigo Hash gerado pelo Genexus para controlar a concorrencia, obtido no GET e enviado para o servidor no PUT, em seguida. Este hash se altera a cada operacao de consulta ao banco.Este Hash e guardado no SDT na propriedade gx_md5_hash, toda comunicacao que venha atualizar o mesmo devera informar esse valor.3) Apagando registrosFinalmente, para se apagar o registro precisaremos de uma simples chamada DELETE,