#12 – Pobieranych danych JSON z API metodą POST w SWIFT

Tym razem zajmiemy się pobieraniem danych z serwera, ale tym razem w zapytaniu umieścimy parametry, które zostaną wysłane metodą POST. Tutaj opisałem jak robić to metodą GET. Gdy już mamy przygotowane parametry i kod z wcześniejszego wpisu, wystarczy że dodamy trzy linijki, odpowiedzialne za wysyłkę zapytania. Działamy cały czas na tych samych stałych co w przypadku GET.

urlRequest.httpMethod = "POST"
let paramString = "id=\(modelId)"
urlRequest.httpBody = paramString.data(using: String.Encoding.utf8)

Kod jest identyczny jak w przykładzie z GET, z tą różnicą że podajemy opcje dla stałej urlRequest, takie jak metoda, oraz dane. Metodę ustawiamy na POST, a dane jako string podajemy z kodowaniem utf8. W przypadku naszej aplikacji wysyłamy tylko jeden parametr id, ale można więcej rozdzielając je znakiem &, tak jak poniżej.

let paramString = "id=\(modelId)&two=\(brandId)"

Finalnie cały kod dotyczący odbioru modeli z danej marki samochodu metodą POST, wygląda tak jak poniżej.

let requestURL: NSURL = NSURL(string: "http://adresurl.pl/api_get_models.php")!
        let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
        urlRequest.httpMethod = "POST"
        
        let paramString = "id=\(modelId)"
        urlRequest.httpBody = paramString.data(using: String.Encoding.utf8)
        
        let session = URLSession.shared
        let task = session.dataTask(with: urlRequest as URLRequest) {
            (data, response, error) -> Void in
            
            let httpResponse = response as! HTTPURLResponse
            let statusCode = httpResponse.statusCode
            
            if (statusCode == 200) {
                
                do{
                    
                    let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [[String: AnyObject]]
                    
                    for model in json! {
                        
                        let name = model["name"] as? String
                        let id   = model["id"] as? String
                        let yearTo   = model["year-to"] as? String
                        let yearFrom = model["year-from"] as? String
                        
                        let ca = CarModel(name: name!, id: id!, from: yearFrom!, to: yearTo!)
                        self.modelsArray.append(ca)
                    }
                    
                    self.tableView.reloadData()
                } catch {
                    print("Error with Json: \(error)")
                }
                
            } else{
                print("UWAGA ERROR")
            }
        }
        
        task.resume()

Jak widać dalsza struktura do odbioru jest oparta na URLSession i jest taka sama jak w przypadku GET. Tym sposobem możemy również wysyłać inne zapytania np. GET, PUT, DELETE lub wykonać coś własnego. Dla większej ilości parametrów zalecam stosować tablicę, aby zachować porządek.

Dodaj komentarz