Bắt đầu ngayBắt đầu miễn phí

Khi API yêu cầu xác thực

Khi một API bên ngoài yêu cầu API key, khóa này nên được đặt trong môi trường của máy chủ và chỉ được đính kèm trong header của yêu cầu đi ra. Client không bao giờ gửi hoặc nhận khóa. Trong bài tập này, bạn sẽ thêm hỗ trợ API key tùy chọn cho công cụ convert_currency của currency server.

Frankfurter API không yêu cầu key cho mục đích sử dụng cơ bản, nhưng nhiều API khác thì có. Bạn sẽ đọc một key tùy chọn từ môi trường (ví dụ: CURRENCY_API_KEY) và, nếu có, thêm nó vào yêu cầu dưới dạng header Authorization: Bearer.

Một máy chủ MCP đã được khởi tạo và lưu trong biến mcp. Mô-đun os đã được import sẵn cho bạn.

Bài tập này là một phần của khóa học

Giới thiệu về Model Context Protocol (MCP)

Xem khóa học

Hướng dẫn bài tập

  • Đọc API key "CURRENCY_API_KEY" từ các biến môi trường và thêm vào header "Authorization" với giá trị "Bearer " cộng với key trong yêu cầu.
  • Truyền headers vào yêu cầu API GET.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

@mcp.tool()
def convert_currency(amount: float, from_currency: str, to_currency: str) -> str:
    """Convert an amount from one currency to another using current exchange rates."""
    url = f"https://api.frankfurter.dev/v1/latest?base={from_currency}&symbols={to_currency}"
    # Read optional API key from the server's environment
    headers = {}
    api_key = os.environ.get(____)
    if api_key:
        headers["Authorization"] = f"Bearer {____}"
    try:
        # Pass headers (and timeout) to the request; key never goes in the URL
        r = requests.get(url, ____=____, timeout=10)
        r.raise_for_status()
        data = r.json()
        rate = data["rates"].get(to_currency)
        if rate is None:
            return f"Could not find exchange rate for {from_currency} to {to_currency}"
        return f"{amount} {from_currency} = {amount * rate:.2f} {to_currency} (Rate: {rate})"
    except requests.exceptions.RequestException as e:
        return f"Error converting currency: {e}"

print(convert_currency(10, "USD", "EUR"))
Chỉnh sửa và Chạy Mã