O cliente florestal é uma estrutura flexível e extensível da API RESTful API, construída sobre URLSession e URLSessionTask . Ele já inclui mapeadores de objetos de rede do JSON para os tipos de dados mais usados. Devido à sua abordagem simples de codificação/decodificação de dados e arquitetura extensível, você pode adicionar facilmente seus mapeadores de objetos de rede personalizados. A Forest fornece todos os recursos necessários para construir um cliente robusto para seus serviços de back -end.
Você poderia perguntar por que não obter outra estrutura de rede comprovada? Claro, você obterá um melhor adequado para suas necessidades e preferência de estilo, mas é sempre bom ter uma opção. A seguir, a lista de recursos que eu queria da camada de rede de nível superior e implementada no Forest Client:
Decodable pod 'Forest'Adicionar protobufs de suporte para extensões:
pod 'Forest/Protobuf'Para usar o serviço de acessibilidade:
pod 'Forest/Reachability'E não se esqueça de importar a estrutura:
import Forest Basta colocar os arquivos dos diretórios Core e Protobuf algo em seu projeto. Para usar as extensões do Protobuf, você precisa integrar adicionalmente a estrutura SwiftProtoBuf em seu projeto.
A classe principal que lida com a tarefa de rede é ServiceTask . ServiceTask inclui métodos de fábrica, ajudando a configurar parâmetros e manipuladores de solicitação e resposta. Se você precisar de mais controle sobre o processo de fazer solicitação e manusear a resposta, poderá usar a delegação e implementar o protocolo ServiceTaskRetrofitting e modificar o comportamento da tarefa via retrofter. Além disso, você pode subclasse ServiceTask , ele é construído para isso.
ServiceTask ( )
. url ( " https://host.com/path/to/endpoint " )
. method ( . GET )
. query ( [ " param " : value ] )
// Expecting valid JSON response
. json { ( object , response ) in
print ( " JSON response received: ( object ) " )
}
. error { ( error , response ) in
print ( " Error occurred: ( error ) " )
}
. perform ( )Envie e receba dados usando objetos em conformidade com o Protocolo Codável:
struct NameRequest : Encodable {
let name : String
}
struct NameResponse : Decodable {
let isValid : Bool
}
ServiceTask ( )
// Set base url and HTTP method
. endpoint ( . POST , " https://host.com " )
// Add path to resource
. path ( " /path/to/resource " )
// Serialize our Codable struct and set body
. body ( codable : NameRequest ( " some " ) )
// Expect response with the object of 'NameResponse' type
. codable { ( object : NameResponse , response ) in
print ( " Name valid: ( object . isValid ) " )
}
// Otherwise will fail with error
. error { ( error , response ) in
print ( " Error occured: ( error ) " )
}
. perform ( )Basta baixar algum arquivo:
ServiceTask ( )
. headers ( [ " Authorization " : " Bearer ( token ) " ] )
. method ( . PUT )
. url ( " https://host.com/file/12345 " )
. body ( text : " 123456789 " )
. file { ( url , response ) in
print ( " Downloaded: ( url ) " )
// Remove temp file
try ? FileManager . default . removeItem ( at : url )
}
. error { ( error , response ) in
print ( " Error occured: ( error ) " )
}
// When download destination not provided, content will be downloaded and saved to temp file
. download ( )Carregar dados de dados codificados por formulário multipart: conteúdo:
do {
// Create new form data builder
var formDataBuilder = FormDataBuilder ( )
// Filename and MIME type will be obtained automatically from URL. It can be provided explicitly too
formDataBuilder . append ( . file ( name : " image " , url : * url * ) )
// Generate form data in memory. It also can be written directly to disk or stream using encode(to:) method
let formData = try formDataBuilder . encode ( )
ServiceTask ( )
. endpoint ( . POST , " https://host.com/upload " )
. body ( data : formData , contentType : formDataBuilder . contentType )
. response ( content : { ( response ) in
switch response {
case . success :
print ( " Done! " )
case . failure ( let error ) :
print ( " Failed to upload: ( error ) " )
}
} )
. perform ( )
}
catch {
print ( " ( error ) )
return
}
Envie e receba mensagens protobuf (GRPC sobre HTTP):
ServiceTask ( )
. endpoint ( . POST , " https://host.com " )
// Create and configure request message in place
. body { ( message : inout Google_Protobuf_StringValue ) in
message . value = " something "
}
// Expecting Google_Protobuf_Empty message response
. proto { ( message : Google_Protobuf_Empty , response ) in
print ( " Done! " )
}
. error { ( error , response ) in
print ( " Error occured: ( error ) " )
}
. perform ( )
// Or another version of the code above with explicitly provided types
ServiceTask ( )
. endpoint ( . POST , " https://host.com " )
// Create and configure request message in place
. body ( proto : Google_Protobuf_SourceContext . self ) { ( message ) in
message . fileName = " file.name "
}
// Expecting Google_Protobuf_Empty message response
. response ( proto : Google_Protobuf_Empty . self ) { ( response ) in
switch response {
case . success ( let message ) :
print ( " Done! " )
case . failure ( let error ) :
print ( " Error occured: ( error ) " )
}
}
. perform ( ) Natan zalkin [email protected]
A floresta está disponível sob a licença do MIT. Consulte o arquivo de licença para obter mais informações.