URLSession দিয়ে Networking Requests করা

Mobile App Development - আইওএস ডেভেলপমেন্ট (iOS) - Networking এবং Web API Integration
291

URLSession দিয়ে Networking Requests করা

URLSession হলো iOS এবং macOS অ্যাপ্লিকেশনের জন্য একটি নেটওয়ার্কিং API, যা ব্যবহার করে সহজে HTTP/HTTPS রিকোয়েস্ট, ডেটা ফেচিং, ফাইল ডাউনলোডিং, এবং আপলোডিং করা যায়। এটি অ্যাসিঙ্ক্রোনাস পদ্ধতিতে কাজ করে, যা মূল থ্রেডকে ব্লক না করে ব্যাকগ্রাউন্ডে নেটওয়ার্ক রিকোয়েস্ট পরিচালনা করতে সাহায্য করে।

URLSession এর মৌলিক ধারণা

URLSession মূলত তিন ধরনের টাস্ক সম্পন্ন করতে পারে:

  1. Data Task: ডেটা ফেচ করা বা API রিকোয়েস্ট পরিচালনা করা।
  2. Download Task: বড় ফাইল ডাউনলোড করার জন্য।
  3. Upload Task: ফাইল বা ডেটা আপলোড করার জন্য।

URLSession দিয়ে Networking Request করার উদাহরণ

1. Data Task: JSON ফেচ করা (GET Request)

Data Task দিয়ে আমরা সাধারণত API রিকোয়েস্ট করে ডেটা (যেমন JSON) ফেচ করে থাকি। নিচে একটি উদাহরণ দেওয়া হলো:

import Foundation

// API URL সেট করা
let urlString = "https://jsonplaceholder.typicode.com/todos/1"
guard let url = URL(string: urlString) else { return }

// URLSession দিয়ে Data Task তৈরি করা
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    // যদি কোনো ত্রুটি থাকে তাহলে তা প্রিন্ট করা
    if let error = error {
        print("Error fetching data: \(error)")
        return
    }
    
    // HTTP Response চেক করা
    if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 {
        // ডেটা প্রাপ্ত হলে তা প্রিন্ট করা
        if let data = data {
            do {
                // JSON ডেটা পার্স করা
                if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
                    print("Fetched JSON: \(json)")
                }
            } catch {
                print("Error parsing JSON: \(error)")
            }
        }
    } else {
        print("Invalid response or status code")
    }
}

// Task শুরু করা
task.resume()

2. POST Request দিয়ে Data পাঠানো

POST রিকোয়েস্ট সাধারণত সার্ভারে ডেটা পাঠানোর জন্য ব্যবহৃত হয়। নিচে একটি উদাহরণ দেওয়া হলো:

import Foundation

let urlString = "https://jsonplaceholder.typicode.com/posts"
guard let url = URL(string: urlString) else { return }

// POST রিকোয়েস্টের জন্য একটি URLRequest তৈরি করা
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

// JSON ডেটা তৈরি করা
let newPost: [String: Any] = [
    "title": "My Post",
    "body": "This is a post body.",
    "userId": 1
]

// JSON ডেটা Data ফরম্যাটে রূপান্তর করা
guard let jsonData = try? JSONSerialization.data(withJSONObject: newPost, options: []) else { return }

// URLSession দিয়ে Data Task তৈরি করা
let task = URLSession.shared.uploadTask(with: request, from: jsonData) { data, response, error in
    // যদি কোনো ত্রুটি থাকে তাহলে তা প্রিন্ট করা
    if let error = error {
        print("Error posting data: \(error)")
        return
    }

    // HTTP Response চেক করা
    if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 201 {
        print("Data posted successfully!")
    } else {
        print("Invalid response or status code")
    }
}

// Task শুরু করা
task.resume()

3. Download Task: ফাইল ডাউনলোড করা

বড় ফাইল বা ইমেজ ডাউনলোড করার জন্য Download Task ব্যবহার করা হয়:

import Foundation

let fileURL = URL(string: "https://example.com/sample.pdf")!

let downloadTask = URLSession.shared.downloadTask(with: fileURL) { location, response, error in
    if let error = error {
        print("Download error: \(error)")
        return
    }

    // ডাউনলোড করা ফাইলের লোকেশন চেক করা
    if let location = location {
        print("File downloaded to: \(location.path)")

        // ফাইল মুভ করা (আপনার ডকুমেন্ট ডিরেক্টরিতে)
        let fileManager = FileManager.default
        let destinationURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("sample.pdf")
        do {
            try fileManager.moveItem(at: location, to: destinationURL)
            print("File moved to: \(destinationURL.path)")
        } catch {
            print("File move error: \(error)")
        }
    }
}

// Task শুরু করা
downloadTask.resume()

URLSession Configuration ব্যবহার

URLSessionConfiguration ব্যবহার করে আপনি URLSession-এর কাস্টম কনফিগারেশন তৈরি করতে পারেন, যা সেশনকে আরও নির্দিষ্টভাবে পরিচালনা করতে সাহায্য করে।

let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30
configuration.allowsCellularAccess = false

let session = URLSession(configuration: configuration)

URLSession এর ডেলিগেট প্যাটার্ন

URLSession ডেলিগেট প্যাটার্ন ব্যবহার করে ডাউনলোড প্রগ্রেস ট্র্যাকিং, অ্যান্ড সিকিউর সেশন ম্যানেজমেন্ট করা যায়:

class MyDownloadDelegate: NSObject, URLSessionDownloadDelegate {
    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
        print("Downloaded file location: \(location)")
    }

    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
        let progress = Double(totalBytesWritten) / Double(totalBytesExpectedToWrite)
        print("Download progress: \(progress)")
    }
}

// ডেলিগেট ব্যবহার করে সেশন তৈরি করা
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: MyDownloadDelegate(), delegateQueue: nil)

let fileURL = URL(string: "https://example.com/sample.pdf")!
let downloadTask = session.downloadTask(with: fileURL)
downloadTask.resume()

সংক্ষেপে:

  • Data Task: সাধারণত API রিকোয়েস্ট এবং JSON ডেটা ফেচ করার জন্য ব্যবহৃত হয়।
  • Download Task: বড় ফাইল ডাউনলোড করার জন্য কার্যকর।
  • Upload Task: ডেটা বা ফাইল সার্ভারে আপলোড করার জন্য।
  • Configuration এবং Delegate: নেটওয়ার্ক রিকোয়েস্টকে আরও কাস্টমাইজড এবং ম্যানেজেবল করে।

URLSession ব্যবহার করে আপনি সহজেই বিভিন্ন ধরনের নেটওয়ার্ক রিকোয়েস্ট তৈরি করতে পারেন এবং অ্যাপ্লিকেশনকে আরও ইন্টারঅ্যাক্টিভ এবং কার্যকরী করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...