O Beagle realiza todas requisições web a partir da dependência networkClient
presente no BeagleDependencies do tipo NetworkClientProtocol
, sendo assim é possível criar a sua própria implementação de camada de rede para ser utilizada no framework.
Com isso você pode:
public protocol NetworkClientProtocol {
typealias Error = NetworkError
typealias NetworkResult = Result<NetworkResponse, NetworkError>
typealias RequestCompletion = (NetworkResult) -> Void
@discardableResult
func executeRequest(
_ request: Request,
completion: @escaping RequestCompletion
) -> RequestToken?
}
Atributo | Tipo | Obrigatório | Definição |
---|---|---|---|
request | Request | ✓ | Contém os dados necessários para a requisição. |
completion | RequestCompletion | ✓ | Bloco que deve ser chamado ao final da execução da função passando o resultado da requisição. |
Além disso a função pode retornar o RequestToken, para que a requisição possa ser cancelada internamente pelo Beagle.
Atributo | Tipo | Obrigatório | Definição |
---|---|---|---|
url | URL | ✓ | Contém a url da requisição. |
additionalData | HttpAdditionalData | Contém os dados adicionais para uma requisição. |
Atributo | Tipo | Obrigatório | Definição |
---|---|---|---|
method | String | Parâmetro que recebe o tipo da requisição, têm-se como default o tipo “GET”. | |
headers | [String: String] | Parâmetro que vai conter o cabeçalho das requisições. | |
body | DynamicObject | Contém o body da requisição. |
Para substituir a classe responsável por realizar as requisições Http para o Beagle, siga os passos a seguir:
Implemente o protocolo NetworkClientProtocol
na classe que deseja utilizar para realizar as requisições, neste caso o CustomNetworkClient
será usado como exemplo:
class CustomNetworkClient: NetworkClientProtocol {
func executeRequest(
_ request: Request,
completion: @escaping RequestCompletion
) -> RequestToken? {
let url: URL = request.url
let headers = request.additionalData?.headers
let method = request.additionalData?.method
var body: Data?
if let additionalDataBody = request.additionalData?.body {
body = try? JSONEncoder().encode(additionalDataBody)
}
//Implementacao de Requisicoes
}
//Implementacao Network Client...
}
No AppDelegate ou na classe de configurações do ambiente do Beagle, atribua a instância de CustomNetworkClient
ao atributo networkClient
presente no Beagle Dependencies:
let dependencies = BeagleDependencies()
dependencies.networkClient = CustomNetworkClient
BeagleConfigurator.setup(dependencies: dependencies)
Pronto! Agora o Beagle utilizará a sua classe com todas as modificações e definições necessárias para realizar as requisições Http.
Caso queira entrar mais a fundo na implementação da camada de rede temos um exemplo aqui
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.