Em muitas requisições REST, existem requisitos de autenticação usando TOKEN, ao invés de BASIC AUTH, OAUTH1, OAUTH2, etc. Abaixo segue um exemplo onde é feita a recuperação de token de autenticação que é na sequencia utilizado como informação de HEADER nas requisições subsequentes:
Exemplo
DEFINE l_rest_refer VARCHAR(10),
l_json_refer VARCHAR(10),
l_result_rest TEXT,
l_status SMALLINT
l_header VARCHAR(5000),
l_body VARCHAR(5000),
l_accessToken CHAR(1000),
l_message CHAR(1000)
########## RECUPERAÇÃO DE TOKEN DE AUTENTICAÇÃO ##########
# Cria o componente para requisições REST.
LET l_rest_refer = _ADVPL_create_component(NULL,"LREST")
# Define o endereço base das requisições.
CALL _ADVPL_set_property(l_rest_refer,"HOST","https://<host>")
#Montar o conteúdo do HEADER e BODY necessários para recuperação de TOKEN,
#conforme estiver especificado na documentação da API REST para obtenção do TOKEN de autenticação
LET l_header = '{"Content-Type: application/x-www-form-urlencoded"}'
LET l_body = 'client_id=EC5TFE42-FB10-4CF2-A20B-B92525B71F6C&client_secret=secret&grant_type=client_credentials&scope=api1'
LET l_status = _ADVPL_get_property(l_rest_refer,"POST","/<apiTokenPath>",l_header,l_body)
IF l_status THEN
LET l_result_rest = _ADVPL_get_property(l_rest_refer,"RESULT")
call conout("POST RESULT REST: " || l_result_rest)
IF l_result_rest <> " " THEN
LET l_json_refer = _ADVPL_create_component(NULL,"LJSONOBJECT")
LET l_status = _ADVPL_get_property(l_json_refer,"ACTIVATE",l_result_rest)
LET l_accessToken = _ADVPL_get_property(l_json_refer,"VALUE","access_token")
CALL _ADVPL_set_property(l_json_refer,"DEACTIVATE")
CALL _ADVPL_destroy_component(l_json_refer)
CALL CONOUT("TOKEN RESULT = "||l_accessToken CLIPPED)
ELSE
CALL CONOUT("TOKEN NOT FOUND")
END IF
ELSE
CALL CONOUT("POST TOKEN ERROR: "||_ADVPL_get_property(l_rest_refer,"ERROR_MESSAGE"))
END IF
CALL _ADVPL_destroy_component(l_rest_refer)
#Se o Token foi recuperado com sucesso
IF l_accessToken <> " " THEN
########## REQUISIÇÃO UTILIZANDO TOKEN OBTIDO ##########
# Cria o componente para requisições REST.
LET l_rest_refer = _ADVPL_create_component(NULL,"LREST")
# Define o endereço base das requisições.
CALL _ADVPL_set_property(l_rest_refer,"HOST","https://<host>")
#Monta conteúdo do HEADER com a chave TOKEN recuperada anteriormente
LET l_header = '{ "Content-Type: application/json", "Authorization: Bearer ',l_accessToken CLIPPED,'" }'
# Método GET.
CALL _ADVPL_get_property(l_rest_refer,"GET","/<RequestApiPath>",l_header CLIPPED)
LET l_result_rest = _ADVPL_get_property(l_rest_refer,"RESULT")
LET l_status = _ADVPL_get_property(l_rest_refer,"STATUS")
CALL conout("STATUS = "||l_status CLIPPED)
CALL conout("API GET RESULT = "||l_result_rest CLIPPED)
# Ao finalizar o uso, libera o componente da memória.
CALL _ADVPL_destroy_component(l_rest_refer)
END IF
Atente para a documentação descrita nos métodos de recuperação de TOKEN e também nos métodos de requisição REST que fazem uso do TOKEN, para avaliar as chaves enviadas em cada seção da requisição necessárias para o correto funcionamento.
Import HTML Content
Visão Geral
Conteúdo das Ferramentas