So stellen Sie Ihre erste App in der FastAPI Cloud bereit

# Einführung

FastAPI ist weit über eine einfache Python-Bibliothek zur Bereitstellung von APIs hinausgewachsen. Es hat sich zu einem breiteren Ökosystem entwickelt, auf das sich viele Entwickler verlassen, um moderne Webanwendungen zu erstellen, insbesondere für KI- und maschinelle Lernprojekte. Einer der Gründe, warum FastAPI so beliebt wurde, ist seine Geschwindigkeit, Einfachheit und sein entwicklerfreundliches Design.

Übersicht über die FastAPI Cloud-Plattform
Bild von FastAPI-Cloud

Nun, mit FastAPI-CloudAuch die Bereitstellung wird viel einfacher. Anstatt Zeit mit der Konfiguration von Servern und Bereitstellungspipelines zu verbringen, können Sie eine Anwendung in Sekundenschnelle mithilfe der FastAPI Cloud-Befehlszeilenschnittstelle (CLI) bereitstellen. Das Setup fühlt sich unkompliziert, leichtgewichtig an und kommt dem reibungslosen Erlebnis, das Entwickler von modernen verwalteten Plattformen erwarten, viel näher.

Zum Zeitpunkt des Verfassens dieses Artikels erfolgt die Bereitstellung des Zugangs noch über eine Warteliste. Ich habe mich vor ein paar Monaten beworben und vor kurzem Zugang erhalten, daher wollte ich einen einfachen Leitfaden basierend auf meinen Erfahrungen zusammenstellen. In diesem Tutorial werde ich den grundlegenden Einrichtungsprozess durchgehen und zeigen, wie man in nur wenigen Schritten eine kleine FastAPI-App bereitstellt.

# Erstellen des Projekts

In diesem Tutorial erstellen Sie mithilfe von FastAPI ein einfaches Stay-Metall-Dashboard. Die App ruft Gold- und Silberpreise von einer API ab, gibt die Daten im JSON-Format zurück und zeigt die Werte im Browser über eine kleine HTML-Schnittstelle an.

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:

  • UV für das Projektgerüst installiert oder eine aktuelle unterstützte Python-Model.
  • Ein FastAPI Cloud-Konto.

Erstellen Sie zunächst ein neues FastAPI-Projekt mit dem offiziellen Setup-Befehl:

uvx fastapi-new metals-live
cd metals-live

Innerhalb weniger Sekunden generiert FastAPI die Projektstruktur und installiert die erforderlichen Abhängigkeiten für Sie.

FastAPI-Projektstruktur nach dem Gerüstbau
Bild vom Autor

Als nächstes aktivieren Sie die virtuelle Umgebung im Projektverzeichnis.

Unter Linux/macOS:

supply .venv/bin/activate

Auf Home windows PowerShell:

.venvScriptsActivate.ps1

# httpx hinzufügen

Als nächstes installieren Sie die Pakete, die die App benötigt. Wir werden verwenden httpx um Stay-Gold- und Silberpreise von der API abzurufen. Außerdem stellen wir sicher, dass die Commonplace-FastAPI-Extras installiert sind, damit die App reibungslos läuft und bereitgestellt werden kann, ohne dass Abhängigkeiten fehlen.

uv add httpx "fastapi(customary)"

Dieser Befehl fügt hinzu httpx für ausgehende API-Anfragen und installiert die standardmäßigen FastAPI-Abhängigkeiten, die üblicherweise für Entwicklung und Bereitstellung benötigt werden.

# Ersetzen der Commonplace-App

Jetzt ist es an der Zeit, die Commonplace-FastAPI-App durch die Model zu ersetzen, die Sie tatsächlich bereitstellen werden.

So sieht die Standardprojektstruktur aus:

Standardmäßige FastAPI-Projektstruktur
Bild vom Autor

Offen most important.py und ersetzen Sie den Inhalt durch den unten gezeigten benutzerdefinierten Code. Diese Model macht zwei Dinge: Sie ruft Stay-Gold- und Silberpreise von der Gold-API ab und stellt ein einfaches Browser-Dashboard bereit, das alle 15 Sekunden automatisch aktualisiert wird.

Fügen Sie dies ein most important.py:

import httpx
from fastapi import FastAPI, HTTPException
from fastapi.responses import HTMLResponse

app = FastAPI(title="Stay Gold & Silver Costs")

GOLD_API_BASE = "https://api.gold-api.com"

async def fetch_price(image: str):
    url = f"{GOLD_API_BASE}/worth/{image}"

    async with httpx.AsyncClient(timeout=10.0) as consumer:
        response = await consumer.get(url)

    if response.status_code != 200:
        elevate HTTPException(status_code=502, element=f"Did not fetch {image} worth")

    information = response.json()

    return {
        "image": information.get("image", image),
        "title": information.get("title", image),
        "worth": information.get("worth"),
        "forex": information.get("forex", "USD"),
        "updatedAt": information.get("updatedAt") or information.get("timestamp"),
    }

@app.get("/api/costs")
async def get_prices():
    gold = await fetch_price("XAU")
    silver = await fetch_price("XAG")
    return {
        "gold": gold,
        "silver": silver,
    }

@app.get("https://www.kdnuggets.com/", response_class=HTMLResponse)
async def residence():
    return """
    <!doctype html>
    <html>
    <head>
      <meta charset="utf-8" />
      <meta title="viewport" content material="width=device-width, initial-scale=1" />
      <title>Stay Gold & Silver Costs</title>
      <fashion>
        physique {
          font-family: Arial, sans-serif;
          background: #0f1115;
          shade: #ffffff;
          margin: 0;
          padding: 40px 20px;
        }
        .container {
          max-width: 900px;
          margin: 0 auto;
        }
        h1 {
          margin-bottom: 8px;
        }
        p {
          shade: #b9c0cc;
        }
        .grid {
          show: grid;
          grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
          hole: 20px;
          margin-top: 30px;
        }
        .card {
          background: #171a21;
          border: 1px stable #2a2f3a;
          border-radius: 16px;
          padding: 24px;
        }
        .label {
          font-size: 14px;
          shade: #9aa4b2;
          margin-bottom: 10px;
        }
        .worth {
          font-size: 36px;
          font-weight: daring;
          margin-bottom: 8px;
        }
        .meta {
          font-size: 14px;
          shade: #c6ced9;
        }
        .footer {
          margin-top: 24px;
          font-size: 13px;
          shade: #8c97a8;
        }
      </fashion>
    </head>
    <physique>
      <div class="container">
        <h1>Stay Gold & Silver Costs</h1>
        <p>Costs refresh routinely each 15 seconds.</p>

        <div class="grid">
          <div class="card">
            <div class="label">Gold</div>
            <div class="worth" id="gold-price">Loading...</div>
            <div class="meta" id="gold-meta"></div>
          </div>

          <div class="card">
            <div class="label">Silver</div>
            <div class="worth" id="silver-price">Loading...</div>
            <div class="meta" id="silver-meta"></div>
          </div>
        </div>

        <div class="footer" id="up to date"></div>
      </div>

      <script>
        async operate loadPrices() {
          strive {
            const res = await fetch('/api/costs');
            const information = await res.json();

            const gold = information.gold;
            const silver = information.silver;

            doc.getElementById('gold-price').textContent =
              `${gold.worth ?? 'N/A'} ${gold.forex ?? ''}`;

            doc.getElementById('silver-price').textContent =
              `${silver.worth ?? 'N/A'} ${silver.forex ?? ''}`;

            doc.getElementById('gold-meta').textContent =
              gold.image || 'XAU';

            doc.getElementById('silver-meta').textContent =
              silver.image || 'XAG';

            const up to date = gold.updatedAt || silver.updatedAt;
            doc.getElementById('up to date').textContent =
              up to date
                ? `Final up to date: ${new Date(up to date).toLocaleString()}`
                : 'Final up to date: Unknown';
          } catch (err) {
            doc.getElementById('gold-price').textContent="Error";
            doc.getElementById('silver-price').textContent="Error";
            doc.getElementById('gold-meta').textContent="";
            doc.getElementById('silver-meta').textContent="";
            doc.getElementById('up to date').textContent="Couldn't load stay costs.";
          }
        }

        loadPrices();
        setInterval(loadPrices, 15000);
      </script>
    </physique>
    </html>
    """

Was dieser Code bewirkt:

  • Erstellt eine FastAPI-App.
  • Ruft Stay-Gold- und Silberpreise von der API ab.
  • Gibt die Daten zurück /api/costs.
  • Stellt ein einfaches HTML-Dashboard zur Verfügung /.
  • Aktualisiert die angezeigten Preise alle 15 Sekunden.

# Lokal testen

Vor der Bereitstellung empfiehlt es sich, die App lokal auszuführen und sicherzustellen, dass alles wie erwartet funktioniert. FastAPI macht dies mit seinem integrierten Entwicklungsserver einfach.

Starten Sie die App mit:

Sobald der Server startet, generiert FastAPI eine lokale URL für Ihre App und eine Dokumenten-URL zum Testen der Endpunkte.

FastAPI-Entwicklungsserver, der im Terminal ausgeführt wird
Bild vom Autor

Öffnen Sie Ihren Browser und gehen Sie zu:

Sie sollten Ihr Stay-Dashboard mit den Gold- und Silberpreisen sehen. Die Werte werden automatisch alle 15 Sekunden aktualisiert.

Live-Metall-Dashboard mit Gold- und Silberpreisen
Bild vom Autor

Sie können den JSON-Endpunkt auch direkt testen unter:

http://127.0.0.1:8000/api/costs

Dies ist besonders nützlich, wenn Sie die Rohantwort überprüfen oder die Daten später mit einem anderen Frontend oder einer anderen Anwendung verbinden möchten.

Rohe JSON-Antwort vom Endpunkt /api/prices
Bild vom Autor

# Bereitstellung in der FastAPI Cloud

Sobald die App lokal funktioniert, können Sie sie in der FastAPI Cloud bereitstellen. Der Bereitstellungsablauf ist sehr einfach und beginnt mit einem einzigen Befehl.

Laufen:

Die CLI führt Sie durch die Verbindung Ihres FastAPI Cloud-Kontos und den Abschluss der Einrichtung. Während des Onboardings werden Ihnen möglicherweise einige kurze Fragen gestellt, z. B. Ihr Teamname, App-Identify und Bereitstellungseinstellungen.

Onboarding-Eingabeaufforderungen für die FastAPI Cloud CLI
Bild vom Autor

Sobald dies erledigt ist, erstellt und stellt FastAPI Cloud Ihre App für Sie bereit.

Der Aufbau und die Bereitstellung von FastAPI Cloud sind im Gange
Bild vom Autor

Nach Abschluss der Bereitstellung erhalten Sie eine öffentliche Stay-URL für Ihre App – zum Beispiel:

FastAPI Cloud-Bereitstellung komplett mit Live-URL
Bild vom Autor

https://metals-live.fastapicloud.dev/

FastAPI Cloud bietet Ihnen auch interaktive API-Dokumente unter:

https://metals-live.fastapicloud.dev/docs

Seite mit interaktiven API-Dokumenten von FastAPI Cloud
Bild vom Autor

Dies ist nützlich, da Sie Ihre API direkt über den Browser testen können, ohne dass zusätzliche Instruments erforderlich sind.

Testen des API-Endpunkts über die FastAPI Cloud-Dokumentenschnittstelle
Bild vom Autor

# Überwachung der App

Nach der Bereitstellung können Sie das FastAPI Cloud-Dashboard verwenden, um Ihre App zu überwachen und ihre Protokolle zu überprüfen.

So zeigen Sie die Protokolle an:

  • Öffnen Sie das FastAPI Cloud-Dashboard.
  • Gehe zu Apps.
  • Wählen Sie Ihre App aus.
  • Offen Protokolle.

Dies ist nützlich, um zu überprüfen, ob Ihre App ordnungsgemäß ausgeführt wird, API-Fehler zu erkennen und Probleme nach der Bereitstellung zu debuggen.

FastAPI Cloud-Dashboard mit App-Protokollen
Bild vom Autor

FastAPI Cloud fühlt sich auch Plattformen ähnlicher an Supabase oder VercelMit verwaltetem Internet hosting, schneller CLI-basierter Bereitstellung und zusätzlichen Integrationen können Sie eine Verbindung zu Ihrer App herstellen, während Sie sie erweitern.

FastAPI Cloud-Dashboard-Integrationspanel
Bild vom Autor

# Zusammenfassung

Mit FastAPI Cloud können Sie eine kleine FastAPI-App ganz einfach von der lokalen Entwicklung in eine Stay-Bereitstellung überführen. In diesem Leitfaden haben wir ein einfaches Stay-Metals-Dashboard erstellt, es lokal getestet, es mit einem Befehl bereitgestellt und die Protokolle nach dem Begin überprüft.

Bei einer ersten Bereitstellung ist der Workflow unkompliziert und eine gute Einführung in die FastAPI Cloud-Erfahrung.

Abid Ali Awan (@1abidaliawan) ist ein zertifizierter Datenwissenschaftler, der gerne Modelle für maschinelles Lernen erstellt. Derzeit konzentriert er sich auf die Erstellung von Inhalten und das Schreiben technischer Blogs zu maschinellem Lernen und Datenwissenschaftstechnologien. Abid verfügt über einen Grasp-Abschluss in Technologiemanagement und einen Bachelor-Abschluss in Telekommunikationstechnik. Seine Imaginative and prescient ist es, ein KI-Produkt mithilfe eines graphischen neuronalen Netzwerks für Schüler mit psychischen Erkrankungen zu entwickeln.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert