import base64 import json import os import requests class API_Proxy: """ ## API Proxy --- O Serviço API Proxy permite realizar chamadas a api externas proxiadas pelo Replay. Dessa forma, as chamadas podem ficar pré- configuradas dentro do Replay. Caso o robô ou aplicação desejem alterar algum parâmetro antes da chamada ainda é possível, para isso, deve-se modificar a estrutura da requisição. Para entender melhor a como funciona a estrutura de requisição, você pode visitar a documentaçao oficial ou dar uma olhada no método "do ()" deste client. """ ep: str = "" APIProxyRequest = { "Name": "", "Method": "", "Url": "", "Header": {"":""}, "Body": "", "Readonly": False } APIProxyResponse = { "Status": "", "StatusCode": 0, "Header": {"":""}, "Body": "" } def __init__ (self): self.ep = "https://localhost:8443" def __request_json_post__(self, path: str, object: dict): """ ## HTTP JSON POST --- Este método é responsável por realizar requisições HTTP do tipo POST para objetos JSON. Ele retorna o corpo de resposta da requisição, ou uma mensagem de erro, que indica qual foi a irregularidade ocorrida ao chamar a API. """ url = self.ep + path print("Calling: " + url) apikey = os.environ.get('REPLAY_APIKEY') headers = {"X-API-KEY": apikey} res = requests.post(url, json = object, headers = headers, verify = False) if res.status_code >= 400: raise Exception(f"HTTP ERROR: {str(res.status_code)} - {res.text}") if res.headers.get("Content-Type") != None and res.headers.get("Content-Type").find("json") != -1: return json.loads(res.text) else: return res.text def do (self, request: dict): """ ## API Proxy Do Faz o proxy da chamada remota e retorna qualquer que seja o resultado desta requisição. --- #### Parâmetros: - request: Estrutura específica da requisição. Veja abaixo como construí-la: { "Name": "Nome de template da chamada", "Method": "Método de requisição (GET, POST, PUT, ...)", "Url": "Url da API que se deseja chamar", "Header": { "Chave da configuração de cabeçalho": "Valor associado", ... }, "Body": "Elementos pertencentes ao corpo da requisição", "Readonly": - True: Mesmo que seja encontrado um template correspondente ao valor de "Name" passado, as configurações desta estrutura prevalecerão na requisição. - False: Caso um template seja encontrado em correspondência ao valor passado em "Name", as configurações do mesmo sobrescreverão as informações passadas nesta estrutura. } --- #### Retorna: -> Resultado da requisição """ return self.__request_json_post__ ("/ipc/apiproxy/do", request)