User-Agent
O User-Agent sempre pode ser falsificado. Existem outros cabeçalhos que você pode checar, mas robôs mais espertos também os enganam. por exemplo. Accept, Accept-Language, Connection e alguns outros que nem sempre são usados por tipo de objeto
Cookies
Bots menos inteligentes não aceitarão e enviarão cookies adequadamente, para que você possa proteger alguns recursos usando cookies. Isso pode ter implicações de privacidade que você deve considerar.
Javascript
Alguns bots não conseguem processar o javascript. Você pode ter um "quebra-cabeça" de javascript oculto, por assim dizer, que requer que o navegador calcule a resposta para um problema matemático aleatório simples. Isso quebrará muitos Restful Clients da API, a menos que você encontre uma maneira inteligente de excluí-los.
Autenticação
Se você tem recursos dos quais deseja manter os robôs, então você precisará proteger esses recursos com autenticação.
Manter ativo
Se tiver certeza de que todos que acessam seu site apoiarão o keep-alive; incluindo proxies, então você pode bloquear conexões que não suportam isso. Alguns encontrarão esta opção unorthadox.
Opções obscuras que também podem limitar os browers e / ou os clientes da API
Eu também descobri que alguns bots não lidam com TLS1.2 + SNI, já que eles geralmente usam bibliotecas mais antigas que não suportam TLS1.2 e ainda menos comuns, SNI. Isso limitará a capacidade de seus usuários acessarem as APIs em seu site, se isso for relevante.
Deixarei para você pesquisar como você pode testar e implementar cada uma dessas coisas e quais delas podem ou não ser apropriadas. Um tamanho não serve para todos.