Crie um serviço de classificação de Box usando FastAPI
No artigo Introdução às classificações do Box, aprendemos como criar rótulos e políticas de classificação para serem aplicadas automaticamente ao seu conteúdo dentro do Box.
Essas políticas permitem algumas personalizações, no entanto…
E se precisarmos de alguma lógica de negócios realmente complexa para classificação de conteúdo?
Bem, existe uma API para isso e vamos explorar um exemplo, desta vez, usando python e FastAPI para criar um serviço de classificação personalizado.
Visão geral
O caso de uso é derivado do aplicativo de amostra anterior, em que a certificação do mergulhador e os cartões de seguro são carregados no aplicativo pelos usuários e queremos "carimbar" esse conteúdo com um PIIrótulo.
Para isso estou utilizando webhooks para captação de eventos relacionados ao conteúdo. O webhook fará ping em nosso serviço de classificação, que por sua vez "carimbará o conteúdo com o rótulo apropriado.
Entre o evento e a chamada de classificação, você pode inserir as regras de negócios que desejar.
Se você quiser dar um passo atrás e ler como chegamos aqui, recomendo dar uma olhada nestes artigos anteriores:
- Criação de aplicativo Box e autenticação JWT
- Aplicativo de exemplo de caixa em Python
- Webhooks de caixa
Precisamos configurar algumas coisas em nosso aplicativo Box.
Primeiro, vamos ao console de administração e, em classificação , crie um novo rótulo.
Em seguida, precisamos criar um webhook em nosso aplicativo, por meio do console do aplicativo .
Para simplificar o exemplo, apliquei o webhook para monitorar eventos em qualquer arquivo dentro da ClassificationServicepasta.
Mostre-me o código
O ponto de entrada principal é realmente bastante estreito.
@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)
Se tudo der certo, podemos prosseguir para realmente classificar o arquivo.
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)
Agora é onde você pode plugar todas as regras de negócios necessárias para classificar o arquivo. Você poderia enviar as informações ou até mesmo o arquivo para um modelo de IA para classificação, correlacioná-lo com outros dados, etc.
Este exemplo é simples e apenas carimbará cegamente todos os arquivos nesta pasta com o PIIrótulo, o que pode ser obtido usando uma política existente simples, estou apenas tentando ilustrar o caso de uso.
Veja em ação
Como de costume, este exemplo totalmente funcional pode ser clonado deste repositório do GitHub .
Vamos ver o que acontece quando carrego um arquivo na pasta especificada:
Isso aciona o webhook para executar ping em nosso serviço de classificação:
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
Embora as classificações automáticas dentro do Box sejam bastante poderosas, a Plataforma Box permite que você implemente qualquer lógica de negócios que desejar para classificar seu conteúdo.
Confira os outros artigos desta série Box Shield and Classification:
- Paredes éticas de escudo de caixa
- Detecção de Ameaças Box Shield
- Classificações de caixa
- Box Shield Acesso Inteligente
- Serviço de classificação usando FastAPI e Python (este artigo)





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)