Для работы с WEB-ресурсами создайте приложение «HHFWWeb», в котором используются методы фреймворка:
Имя метода | Краткое описание |
initWithCredentials (_: host: environment: project: device:) | Метод выполняет инициализацию фреймворка. |
auth (_: password:) | Метод выполняет аутентификацию пользователя по логину и паролю. |
openBase (_: key:) | Метод открывает соединение с базой данных по указанному пути. |
resources (_: handler:) | Метод получает схемы доступных ресурсов и автоматически создает в базе данных соответствующие таблицы. |
request (_: requestCallParams: handler:) | Метод отправляет универсальный запрос к ресурсу без загрузки в базу данных. |
Вспомогательные методы:
Имя метода | Краткое описание |
getURL (for:) | Метод возвращает URL для файла с заданным именем в папке «Documents».
Тип возвращаемых данных: URL |
Приложение «HHFWWeb» состоит из одного экрана, текстового представления «UITextView» и кнопок «UIButton»:
«GET web request». GET-запрос на получение данных WEB-ресурса;
«POST web request». POST-запрос на получение данных WEB-ресурса.
Примечание. При загрузке приложения выполняется аутентификация, кнопки недоступны. Если аутентификация выполнена успешно, то кнопки будут доступны и в текстовом поле появится надпись «Authentication and resources load success».
Для выполнения примера:
Нажмите кнопку «GET web request».
В результате будет инициирован GET-запрос к WEB-ресурсу.
Нажмите кнопку «POST web request».
В результате будет инициирован POST-запрос к WEB-ресурсу.
Код приложения:
import UIKit
class ViewController: UIViewController {
// Определим выходные переменные
@IBOutlet weak var resultTextView: UITextView!
@IBOutlet weak var getRequestButton: UIButton!
@IBOutlet weak var postRequestButton: UIButton!
// Переопределим метод
override func viewDidLoad() {
super.viewDidLoad()
self.deactivateButtons()
self.initializeFramework()
self.auth {
let databaseName = "database.sqlite"
if self.initializeDatabase(databaseName) {
self.loadResourcesScheme(databaseName) {
self.activateButtons()
self.resultTextView.text = "Authentication and load resources success"
}
}
}
}
// Зададим метод, который будет выполняться при нажатии на кнопку
@IBAction func getRequestPressed(_ sender: UIButton) {
self.performGetRequest { (jsonResult) in
self.resultTextView.text = String(format: "%@", jsonResult)
}
}
@IBAction func postRequestPressed(_ sender: UIButton) {
self.performPostRequest { (jsonResult) in
self.resultTextView.text = String(format: "%@", jsonResult)
}
}
// Выполним инициализацию фреймворка
private func initializeFramework() {
let apiVersion: String = "v1"
let host: String = "http://testmasterfmp.fsight.cloud/"
let environment: String = "Leonid_environment"
let project: String = "Leonid_project"
let device: String = (UIDevice.current.identifierForVendor?.uuidString)!
HHFWController.sharedInstance().initWithCredentials(
apiVersion,
host: host,
environment: environment,
project: project,
device: device
)
}
// Выполним аутентификацию
private func auth(completion: @escaping ()->()) {
let username: String = "Leonid"
let password: String = "123123"
HHFWController.sharedInstance().auth(username, password: password){ (jsonResult) in
if let jsonDict = jsonResult as? NSDictionary,
let status = jsonDict["status"] as? String, status == "ok" {
print("Auth success")
completion()
} else {
print("Auth error")
}
}
}
// Откроем или создадим базу данных
private func initializeDatabase(_ databaseName: String) -> Bool {
let fullDatabaseURL = self.getURL(for: databaseName)
return HHFWController.sharedInstance().openBase(fullDatabaseURL.path, key: "")
}
// Загрузим схему ресурсов
private func loadResourcesScheme(_ databaseName: String, completion: @escaping ()->()) {
HHFWController.sharedInstance().resources(databaseName) { (jsonResult) in
if let jsonDict = jsonResult as? NSDictionary,
let status = jsonDict["status"] as? String, status == "ok" {
print("Load resources success")
completion()
} else {
print("Load resources error")
}
}
}
// Выполним запрос Get
private func performGetRequest(completion: @escaping (NSDictionary)->()) {
let resourceName = "yandex"
let requestCallParams = RequestCallParams(defaultProperty: ())
HHFWController.sharedInstance().request(resourceName, requestCallParams: requestCallParams) { (jsonResult) in
if let jsonDict = jsonResult as? NSDictionary,
let status = jsonDict["status"] as? String, status == "ok" {
print("GET request success")
completion(jsonDict)
} else {
print("GET request error")
}
}
}
// Выполним запрос Post
private func performPostRequest(completion: @escaping (NSDictionary)->()) {
let resourceName = "yandex"
let requestCallParams = RequestCallParams(defaultProperty: ())
requestCallParams?.headers = ["Content-Type": "application/json", "Accept": "application/json"]
requestCallParams?.data = "{}"
HHFWController.sharedInstance().request(resourceName, requestCallParams: requestCallParams) { (jsonResult) in
if let jsonDict = jsonResult as? NSDictionary,
let status = jsonDict["status"] as? String, status == "ok"{
print("POST request success")
completion(jsonDict)
} else {
print("POST request error")
if let jsonDict = jsonResult as? NSDictionary {
self.resultTextView.text = String(format: "%@", jsonDict)
}
}
}
}
// Вызовем вспомогательные классы
private func getURL(for fileName: String) -> URL {
let paths: [URL] = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let fileURL: URL = paths[0].appendingPathComponent(fileName)
return fileURL
}
// Зададим методы для отображения элементов пользовательского интерфейса приложения
private func deactivateButtons() {
self.getRequestButton.isEnabled = false
self.postRequestButton.isEnabled = false
}
private func activateButtons() {
self.getRequestButton.isEnabled = true
self.postRequestButton.isEnabled = true
}
}
См. также: