En esta publicación, le brindaremos información sobre la impresión de solicitudes de datos utilizando un URLProtocol personalizado: código en línea. Escuche que le daremos detalles sobre la impresión de solicitudes de datos utilizando un protocolo de URL personalizado: código en línea y cómo usarlo, también le daremos una demostración si es necesario.

Casi todas las aplicaciones contienen algún tipo de solicitud de datos. La impresión de solicitudes de datos a veces puede ser útil para fines de depuración. Esto se puede hacer bastante fácil usando un archivo personalizado URLProtocol.

Creación de un protocolo URL personalizado

Se necesita una costumbre URLProtocolpara imprimir las solicitudes de datos. Una implementación personalizada de URLProtocolincluir el canInitmétodo es suficiente para este caso.

Arquitectura de aplicaciones SwiftUI con MVC y MVVM Aunque puede crear una aplicación simplemente juntando un poco de código, sin las mejores prácticas y una arquitectura robusta, pronto terminará con un código espagueti inmanejable. Aprenda a crear aplicaciones sólidas y mantenibles con menos errores con esta guía gratuita.
/// A custom protocol for logging outgoing requests.
final class PrintProtocol: URLProtocol {

    override open class func canInit(with request: URLRequest) -> Bool {
        // Print valuable request information.
        print("? Running request: (request.httpMethod ?? "") - (request.url?.absoluteString ?? "")")

        // By returning 'false', this URLProtocol will do nothing less than logging.
        return false
    }
}

El protocolo será mayormente ignorado mientras regresamos falseSolo se usa para imprimir y no afectará las solicitudes salientes.

Habilitación del protocolo

El protocolo debe habilitarse antes de que comience a funcionar. Esto se puede hacer con una simple línea de código:

// Register the custom URL Protocol.
URLProtocol.registerClass(PrintProtocol.self)

Aunque esto suele ser suficiente para que funcione, a veces es necesario crear su propia configuración de sesión personalizada. Esto también cuenta para el uso con Alamofire .

let configuration = URLSessionConfiguration.default
configuration.protocolClasses?.insert(PrintProtocol.self, at: 0)
let sessionManager = Alamofire.SessionManager(configuration: configuration)
sessionManager.request("https://www.onlinecode.org/feed/")

Para obtener más información sobre el uso avanzado con Alamofire, consulte su documentación .

Pruébelo usted mismo
? Running request: GET - https://www.onlinecode.org/feed/
✅ Request completed

El uso de este código de patio de recreo le da el resultado anterior:

import Foundation
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

/// A custom protocol for logging outgoing requests.
final class PrintProtocol: URLProtocol {

    override open class func canInit(with request: URLRequest) -> Bool {
        // Print valuable request information.
        print("? Running request: (request.httpMethod ?? "") - (request.url?.absoluteString ?? "")")

        // By returning 'false', this URLProtocol will do nothing less than logging.
        return false
    }
}

// Register the custom URL Protocol.
URLProtocol.registerClass(PrintProtocol.self)

// Execute a data request.
URLSession.shared.dataTask(with: URL(string: "https://www.onlinecode.org/feed/")!) { (_, _, _) in
    print("✅ Request completed")
}.resume()
Arquitectura de aplicaciones SwiftUI con MVC y MVVM Aunque puede crear una aplicación simplemente juntando un poco de código, sin las mejores prácticas y una arquitectura robusta, pronto terminará con un código espagueti inmanejable. Aprenda a crear aplicaciones sólidas y mantenibles con menos errores con esta guía gratuita.

Un uso avanzado de un URLProtocol personalizado

Este es solo un ejemplo simple de lo que puede hacer con un archivo personalizado URLProtocolLas implementaciones más avanzadas le permiten, por ejemplo, simular sus pruebas unitarias. Puede consultar el marco Mocker de WeTransfer para inspirarse.