Академический Документы
Профессиональный Документы
Культура Документы
Networking
Networking
Протокол Передачи Гипертекста (HTTP), один из протоколов стека TCP/IP, был
изначально разработан для публикации и получения HTML страниц и теперь
используется для распределенных информационных систем. HTTP используется во
Всемирной Паутине для передачи данных и является одним из самых широко
применяемых прикладных протоколов
Пример создания
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
• dataTaskWithUrl - dataTaskWithRequest
• downloadTaskWithUrl - downloadTaskWithRequest
• uploadTaskWithUrl - uploadTaskWithRequest
URLSession
Различие между dataTaskWithUrl и dataTaskWithRequest, как следует из
названия, заключается в том, что dataTaskWithUrl требует URL, в то время
как dataTaskWithRequest требует переменную NSMutableURLRequest.
Различие между URL и NSMutableURLRequest в том, что URL сначала должен
быть инициализирован с вашими требованиями, и ничто не может измениться,
в то время с NSMutableURLRequest вы можете определить переменную и
тогда устанавливать настройки: значения таймаута, политика кеширования
или использование http методов.
Пример работы с JSON
http://jsonplaceholder.typicode.com
let urlString = URL(string: "http://jsonplaceholder.typicode.com/users/1")
task.resume()
JSONSerialization
Используйте NSJSONSerialization для преобразования JSON в Foundation
объекты и преобразования Foundation объектов в JSON.
Примечание:
На iOS 7 и более поздних версиях, а также на macOS 10.9 и выше,
NSJSONSerialization это потоко безопасно.
/* Возвращает YES, если данный объект может быть преобразован в
данные JSON, иначе возвращает NO. Объект должен иметь следующие
свойства:
- Объект верхнего уровня - NSArray или NSDictionary
- Все объекты: NSString, NSNumber, NSArray, NSDictionary
или NSNull
- Все dictionary keys - NSStrings
- NSNumbers не NaN или бесконечность
Могут применяться другие правила. Вызов этого метода или
попытка преобразования - это окончательные способы определить,
может ли данный объект быть преобразован в данные JSON. */
open class func isValidJSONObject(_ obj: Any) -> Bool
URLSessionDownloadDelegate:
extension SearchViewController: URLSessionDownloadDelegate {
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask,
didFinishDownloadingTo location: URL) {
print("Finished downloading to \(location).")
}
}
URLSession
На высоком уровне загрузка файла аналогична извлечению данных. В
вашем приложении должны быть реализованы следующие методы
делегирования:
• URLSession:downloadTask:didFinishDownloadingToURL:
Предоставляет вашему приложению URL для временного файла, в
котором хранится загруженный контент. Важно: перед тем как этот
метод вернется, он должен либо открыть файл для чтения, либо
перенести его в постоянное место. Когда этот метод возвращается,
временный файл удаляется, если он все еще существует в исходном
местоположении.
•
URLSession:downloadTask:didWriteData:totalBytesWritten:totalB
ytesExpectedToWrite: Предоставляет вашему приложению
информацию о состоянии загрузки.
• URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:
Сообщает вашему приложению, что его попытка возобновить ранее
неудачную загрузку прошла успешно.
• URLSession:task:didCompleteWithError: Сообщает вашему
приложению, что загрузка не удалась.
Upload Data
Ваше приложение может предоставить контент тела запроса для HTTP
POST запроса тремя способами: как объект NSData, как файл или как
поток. В общем:
• Используйте объект NSData, если ваше приложение уже имеет данные в
памяти и не имеет никаких причин избавляться от них.
• Используйте файл, если контент, который вы загружаете, существует в
виде файла на диске, если вы выполняете фоновый перенос, или если вы
хотите записать его на диск, чтобы он мог освободить память, связанную с
этими данными.
• Используйте поток (stream), если вы получаете данные по сети.
Upload Data
Чтобы загрузить содержимое тела с помощью объекта NSData, ваше
приложение вызывает или метод uploadTaskWithRequest:fromData: или
uploadTaskWithRequest:fromData:completionHandler: для создания
задачи загрузки и предоставления данных тела запроса через параметр
fromData.
let textFileURL = URL(fileURLWithPath: "/path/to/file.txt")
uploadTask.resume()