O exemplo a seguir mostra como chamar a API com o Python requests
usando uma chave de API para autenticação. Para usá-lo:
- Instale a biblioteca
requests
do Python. Na linha de comando:pip install requests
. - Salve o seguinte programa Python no seu computador com o nome
example.py
. - Salve o arquivo example_request.json no mesmo diretório do seu (este é um exemplo de solicitação JSON).
- Crie um arquivo
credentials.json
no mesmo diretório do seu programa, com{"key": "your_api_key"}
- Execute o exemplo na linha de comando:
python example.py
.
# example.py
import json
import requests
def run_example():
"""Calls the OR API to solve a shift scheduling problem."""
# Endpoint for the workforce scheduling solver in the OR API.
end_point = "https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling"
# Read the API Key from a JSON file with the format:
# {"key": "your_api_key"}
with open("credentials.json") as f:
credentials = json.load(f)
api_key = credentials["key"]
# Load the JSON file with the request.
with open("example_request.json", "r") as f:
json_request = json.load(f)
# Call the API post method.
response = requests.post(f"{end_point}?key={api_key}", json=json_request)
# Process the response.
if response.ok:
solution = json.loads(response.content)
with open("example_response.json", "w") as f:
json.dump(solution, f, indent=2)
print(solution)
else:
error = json.loads(response.content)["error"]
print(f'Status code {error["code"]}: {error["message"]}')
if __name__ == "__main__":
run_example()
Como definir prazos?
Um prazo determina o tempo máximo decorrido que uma chamada para a API deve levar. Um usuário pode definir prazos do cliente e do servidor. No contexto da API OR, uma o prazo do servidor é mais útil, pois informa ao servidor de back-end como tempo necessário para receber uma solicitação, executar o solucionador e retornar uma resposta. Por outro lado, os prazos do cliente são úteis para definir o tempo máximo que o aplicativo cliente (ou seja, o aplicativo que chama a API OR) aguardar uma resposta antes de expirar.
O snippet de código a seguir define um prazo para o cliente e o servidor no
cabeçalhos de sessão da solicitação. O prazo do cliente é definido como 60 segundos. O
o prazo do servidor deve ser menor que o prazo do cliente para considerar
sobrecarga de comunicação. Aqui, definimos o prazo do servidor como 95% do prazo do
cliente, mas isso pode variar de acordo com o aplicativo. Observe que a API
também foi movida para os cabeçalhos da sessão para fazer a chamada session.post(...)
limpadores.
# Call the API post method.
session = requests.Session()
client_deadline_seconds = 60
server_deadline_seconds = 0.95 * client_deadline_seconds
session.headers = {
"Content-Type": "application/json",
"Connection": "keep-alive",
"Keep-Alive": f"timeout={client_deadline_seconds}, max=1",
"X-Server-Timeout": f"{server_deadline_seconds}",
"X-Goog-Api-Key": api_key,
}
response = session.post(end_point, json=json_request, timeout=client_deadline_seconds)