ÎncepețiÎncepe gratuit

Când API-urile necesită autentificare

Când un API extern necesită un API key, acesta trebuie să se afle în mediul serverului și să fie atașat doar în antetul cererii de ieșire. Clientul nu trimite și nici nu primește cheia. În acest exercițiu vei adăuga suport opțional pentru API key în instrumentul convert_currency al serverului de valute.

Frankfurter API nu necesită o cheie pentru utilizare de bază, însă multe API-uri o cer. Vei citi o cheie opțională din mediu (de ex., CURRENCY_API_KEY) și, dacă este setată, o vei adăuga la cerere ca antet Authorization: Bearer.

Un server MCP a fost deja instanțiat și stocat în variabila mcp. Modulul os a fost deja importat pentru tine.

Acest exercițiu face parte din cursul

Introducere în Model Context Protocol (MCP)

Vezi cursul

Instrucțiuni pentru exercițiu

  • Citește API key-ul "CURRENCY_API_KEY" din variabilele de mediu și adaugă-l în antetul "Authorization" cu valoarea "Bearer " plus cheia, în cadrul cererii.
  • Pasează antetele în cererea GET către API.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

@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"))
Editează și rulează codul