네트워크 설계 예시

다음 예는 Python requests를 사용하여 API를 호출하는 방법을 보여줍니다. API 키를 사용하여 인증을 위한 API 키를 사용할 수 있습니다. 사용하려면 다음 안내를 따르세요.

  • Python requests 라이브러리를 설치합니다. 명령줄에서: pip install requests
  • 다음 Python 프로그램을 컴퓨터에 저장하여 이름을 example.py로 지정합니다.
  • example_request.json 파일을 프로그램과 동일한 디렉터리에 저장합니다(샘플 JSON 요청).
  • 다음과 같은 디렉터리에 credentials.json 파일을 만듭니다. 프로그램({"key": "your_api_key"} 제공)
  • 명령줄에서 예시를 실행합니다. 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/shipping:designShippingNetwork"
    
    # 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()

기한은 어떻게 설정하나요?

기한에 따라 API 호출에 걸리는 최대 실제 경과 시간이 결정됩니다. 사용자는 클라이언트 및 서버 기한을 모두 설정할 수 있습니다. OR API의 맥락에서 서버 기한이 더 유용하며, 이는 백엔드 서버에 요청을 수신하고 기본 솔버를 실행하고 있습니다. 반면에 클라이언트 기한은 클라이언트 애플리케이션 (OR API를 호출하는 애플리케이션)이 타임아웃되기 전에 응답을 기다립니다.

다음 코드 스니펫은 요청의 세션 헤더입니다. 클라이언트 기한은 60초로 설정됩니다. 이 서버 기한은 고려해야 할 클라이언트 기한보다 짧아야 합니다. 통신 오버헤드도 발생할 수 있습니다 여기서는 서버 기한을 클라이언트의 95% 로 설정합니다. 이는 신청에 따라 달라질 수 있습니다. session.post(...) 호출을 더 깔끔하게 만들기 위해 API 키도 세션 헤더로 이동했습니다.



# 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)