Klien Hutan adalah kerangka kerja klien API yang fleksibel dan dapat diperluas yang dibangun di atas URLSession dan URLSessionTask . Ini sudah termasuk pemetaan objek jaringan dari JSON ke tipe data yang paling umum digunakan. Karena pendekatan pengkodean/decoding data yang sederhana dan arsitektur yang dapat diperluas, Anda dapat dengan mudah menambahkan pemetaan objek jaringan khusus Anda. Forest menyediakan semua fitur yang diperlukan untuk membangun klien yang kuat untuk layanan backend Anda.
Anda bisa bertanya mengapa tidak mendapatkan kerangka kerja jaringan yang terbukti lainnya? Tentu, Anda akan mendapatkan satu yang paling cocok untuk kebutuhan dan preferensi gaya Anda, tetapi selalu baik untuk memiliki pilihan. Berikut ini adalah daftar fitur yang saya inginkan dari lapisan jaringan tingkat lebih tinggi dan diimplementasikan di klien hutan:
Decodable pod 'Forest'Tambahkan ekstensi pendukung protobuf:
pod 'Forest/Protobuf'Untuk menggunakan layanan jangkauan:
pod 'Forest/Reachability'Dan jangan lupa untuk mengimpor kerangka kerja:
import Forest Cukup letakkan file dari direktori Core dan Protobuf di suatu proyek Anda. Untuk menggunakan ekstensi protobuf, Anda perlu mengintegrasikan kerangka kerja SwiftProtobuf ke dalam proyek Anda.
Kelas inti yang menangani tugas jaringan adalah ServiceTask . ServiceTask mencakup metode pabrik yang membantu mengonfigurasi permintaan dan respons params dan penangan. Jika Anda membutuhkan lebih banyak kontrol atas proses membuat permintaan dan menangani respons, Anda dapat menggunakan delegasi dan mengimplementasikan protokol ServiceTaskRetrofitting dan memodifikasi perilaku tugas melalui retrofitter. Anda juga dapat subkelas ServiceTask , dibangun untuk itu.
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 ( )Kirim dan terima data menggunakan objek yang sesuai dengan protokol Codable:
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 ( )Cukup unduh beberapa file:
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 ( )Unggah Konten Data Formulir Multipart Data:
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
}
Kirim dan Terima Pesan Protobuf (GRPC melalui 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]
Hutan tersedia di bawah lisensi MIT. Lihat file lisensi untuk info lebih lanjut.