#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.