Erstellen Sie mit FastAPI einen Box-Klassifizierungsdienst
Im Artikel „Erste Schritte mit Box-Klassifizierungen“ haben wir erfahren, wie Sie Klassifizierungsbezeichnungen und -richtlinien erstellen, die automatisch auf Ihre Inhalte in Box angewendet werden.
Diese Richtlinien ermöglichen jedoch eine ganze Reihe von Anpassungen ...
Was wäre, wenn wir eine wirklich komplexe Geschäftslogik für die Inhaltsklassifizierung benötigen?
Nun, dafür gibt es eine API, und wir werden dieses Mal ein Beispiel untersuchen, bei dem wir Python und FastAPI verwenden, um einen benutzerdefinierten Klassifizierungsdienst zu erstellen.
Überblick
Der Anwendungsfall leitet sich von der vorherigen Beispiel-App ab, bei der Taucherzertifikate und Versicherungskarten von den Benutzern in die App hochgeladen werden und wir diesen Inhalt mit einem Label „stempeln“ möchten PII.
Dazu verwende ich Webhooks, um Ereignisse im Zusammenhang mit dem Inhalt aufzugreifen. Der Webhook sendet einen Ping an unseren Klassifizierungsdienst, der wiederum „den Inhalt mit der entsprechenden Bezeichnung stempelt“.
Zwischen der Veranstaltung und dem Klassifizierungsaufruf können Sie beliebige Geschäftsregeln einfügen.
Wenn Sie einen Schritt zurücktreten und nachlesen möchten, wie wir hierher gekommen sind, empfehle ich Ihnen, einen Blick auf diese vorherigen Artikel zu werfen:
Wir müssen ein paar Dinge in unserer Box-App einrichten.
Gehen wir zunächst zur Administrationskonsole und erstellen unter „Klassifizierung“ ein neues Label.
Als nächstes müssen wir über die App-Konsole einen Webhook in unserer App erstellen .
Um das Beispiel zu vereinfachen, habe ich den Webhook angewendet, um Ereignisse für jede Datei im ClassificationServiceOrdner zu überwachen.
Zeig mir den Code
Der Haupteinstiegspunkt liegt wirklich ziemlich direkt nach vorne.
@app.post("/box/classify")
async def classify(
request: Request,
settings: config.Settings = Depends(get_settings),
db: Session = Depends(get_db),
):
""" Classify endpoint"""
body_json = await request.json()
body = await request.body()
# check for valid signatures
is_valid = box_webhooks.webhook_signature_check(
webhook_id, body, request.headers, db, settings
)
if not is_valid:
raise HTTPException(status_code=404, detail="Invalid signature")
box_webhooks.classify_file(body_json["source"]["id"], db, settings)
return {"ok": True}
def webhook_signature_check(
webhook_id: str,
body: bytes,
header: dict,
db: Session,
settings: Settings,
) -> bool:
"""check the signature of the webhook request"""
# get a client object
client = jwt_check_client(db, settings)
# get a webhook object
webhook = client.webhook(webhook_id)
# get the signature keys
key_a = settings.WH_KEY_A
key_b = settings.WH_KEY_B
# validate message body
return webhook.validate_message(body, header, key_a, key_b)
Wenn alles ausgecheckt ist, können wir mit der eigentlichen Klassifizierung der Datei fortfahren.
def classify_file(file_id: str, db: Session, settings: Settings):
"""classify a file"""
classification = settings.CLASSIFICATION
client = jwt_check_client(db, settings)
file = client.file(file_id)
# file.get()
# file.get_all_metadata()
# the super complex file classification rules go in here
file_class = file.get_classification()
if file_class is None or file_class != classification:
file_class = file.set_classification(classification)
Jetzt können Sie alle Geschäftsregeln einfügen, die zur Klassifizierung der Datei erforderlich sind. Sie könnten die Informationen oder sogar die Datei zur Klassifizierung an ein KI-Modell senden, sie mit anderen Daten korrelieren usw.
Dieses Beispiel ist einfach und stempelt einfach blind alle Dateien in diesem Ordner mit der PIIBezeichnung, was mit einer einfachen vorhandenen Richtlinie erreicht werden könnte. Ich versuche nur, den Anwendungsfall zu veranschaulichen.
Sehen Sie es in Aktion
Wie üblich kann dieses voll funktionsfähige Beispiel aus diesem GitHub-Repo geklont werden .
Mal sehen, was passiert, wenn ich eine Datei in den angegebenen Ordner hochlade:
Dadurch wird der Webhook dazu veranlasst, unseren Klassifizierungsdienst anzupingen:
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: Started reloader process [3292] using WatchFiles
INFO: Started server process [3311]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: 10.1.1.70:39278 - "POST /box/classify HTTP/1.0" 200 OK
Obwohl automatische Klassifizierungen in Box recht leistungsstark sind, können Sie mit der Box-Plattform jede beliebige Geschäftslogik implementieren, die Sie zur Klassifizierung Ihrer Inhalte benötigen.
Schauen Sie sich die anderen Artikel dieser Box Shield- und Klassifizierungsserie an:
- Box Shield Ethische Wände
- Box Shield-Bedrohungserkennung
- Box-Klassifizierungen
- Box Shield Smart Access
- Klassifizierungsdienst mit FastAPI und Python (dieser Artikel)

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































