Membuat Panggilan Alat API Lebih Tangguh
Di lingkungan produksi, alat convert_currency() milik server currency tidak boleh menggantung jika API kurs valuta lambat atau tidak dapat dijangkau. Untuk mengatasinya, Anda akan menerapkan timeout pada permintaan dan memastikan kegagalan apa pun mengembalikan pesan error singkat dan jelas kepada pengguna alih-alih pengecualian mentah.
Sebuah server MCP telah diinstansiasi dan disimpan sebagai variabel mcp.
Latihan ini merupakan bagian dari kursus
Pengantar Model Context Protocol (MCP)
Instruksi latihan
- Terapkan logika try-except yang akan mencoba permintaan API, dan gagal secara elegan jika terjadi error dengan menangkap pengecualian.
- Tambahkan timeout 10 detik pada pemanggilan
requests.get()agar permintaan tidak menggantung tanpa batas.
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.
Args:
amount: The amount to convert
from_currency: Source currency code (e.g., 'USD', 'EUR', 'GBP')
to_currency: Target currency code (e.g., 'USD', 'EUR', 'GBP')
Returns:
A string with the conversion result and exchange rate
"""
url = f"https://api.frankfurter.dev/v1/latest?base={from_currency}&symbols={to_currency}"
# Implement try-except to gracefully handle errors
____:
# Add a 10-second timeout so the request does not hang
r = requests.get(url, ____=____)
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})"
____ requests.exceptions.RequestException as e:
return f"Error converting currency: {e}"
print(convert_currency(10, "USD", "EUR"))