Xcrap Logo

Criando seu Próprio Cliente

Aprenda a extender o Xcrap com novos adaptadores HTTP ou de Navegador.

Se os clientes oficiais não atenderem às suas necessidades, você pode criar o seu próprio estendendo as bases fornecidas pelo @xcrap/core.

Implementando a Interface ClientInterface

Seu cliente precisa implementar o método fetch e opcionalmente o fetchMany.

import { 
  BaseClient, 
  ClientInterface, 
  HttpResponse, 
  ClientRequestOptions 
} from "@xcrap/core";

export class MeuClienteCustomizado 
  extends BaseClient<any> 
  implements ClientInterface 
{
  async fetch(options: ClientRequestOptions): Promise<HttpResponse> {
    // 1. Sua lógica de requisição (ex: usando lib nativa de rede)
    const rawResult = await minhaLibExtrema(options.url);

    // 2. Retornar sempre um HttpResponse
    return new HttpResponse({
      status: 200,
      statusText: "OK",
      body: rawResult.data,
      headers: rawResult.headers,
      attempts: 1,
      failedAttempts: []
    });
  }

  // fetchMany já tem uma implementação padrão na BaseClient, 
  // mas você pode sobrescrevê-la se necessário.
}

Por que estender BaseClient?

Ao herdar de BaseClient, seu cliente ganha automaticamente:

  • Suporte a funções dinâmicas de User-Agent e Proxy.
  • Lógica de throttling para fetchMany.
  • Compatibilidade total com o @xcrap/factory.

Boas Práticas

  • HttpResponse: Sempre encapsule sua resposta na classe HttpResponse para que os usuários possam usar .asHtmlParser(), .asJsonParser(), etc.
  • Tratamento de Erros: Lance erros padronizados do @xcrap/core (ex: InvalidStatusCodeError) para manter a consistência do framework.

On this page