Jika API Memerlukan Otentikasi
Saat API eksternal memerlukan API key, key tersebut harus disimpan di lingkungan server dan hanya dilampirkan pada header permintaan keluar. Klien tidak pernah mengirim atau menerima key tersebut. Pada latihan ini Anda akan menambahkan dukungan API key opsional ke tool convert_currency milik currency server.
Frankfurter API tidak memerlukan key untuk penggunaan dasar, tetapi banyak API yang memerlukannya. Anda akan membaca key opsional dari lingkungan (misalnya, CURRENCY_API_KEY) dan, jika ada, menambahkannya ke permintaan sebagai header Authorization: Bearer.
Sebuah server MCP telah dibuat dan disimpan sebagai variabel mcp. Modul os sudah diimpor untuk Anda.
Latihan ini merupakan bagian dari kursus
Pengantar Model Context Protocol (MCP)
Instruksi latihan
- Baca API key
"CURRENCY_API_KEY"dari variabel lingkungan dan tambahkan ke header"Authorization"dengan nilai"Bearer "ditambah key tersebut pada permintaan. - Teruskan headers tersebut dalam permintaan API GET.
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
@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"))