Пример работы с WEB-ресурсами

Для работы с WEB-ресурсами создайте приложение «HHFWWeb», в котором используются методы фреймворка:

Имя метода Краткое описание
initWithCredentials (_: host: environment: project: device:) Метод выполняет инициализацию фреймворка.
auth (_: password:) Метод выполняет аутентификацию пользователя по логину и паролю.
openBase (_: key:) Метод открывает соединение с базой данных по указанному пути.
resources (_: handler:) Метод получает схемы доступных ресурсов и автоматически создает в базе данных соответствующие таблицы.
request (_: requestCallParams: handler:) Метод отправляет универсальный запрос к ресурсу без загрузки в базу данных.

Вспомогательные методы:

Имя метода Краткое описание
getURL (for:) Метод возвращает URL для файла с заданным именем в папке «Documents».
Тип возвращаемых данных: URL

Приложение «HHFWWeb» состоит из одного экрана, текстового представления «UITextView» и кнопок «UIButton»:

Примечание. При загрузке приложения выполняется аутентификация, кнопки недоступны. Если аутентификация выполнена успешно, то кнопки будут доступны и в текстовом поле появится надпись «Authentication and resources load success».

Для выполнения примера:

  1. Нажмите кнопку «GET web request».

В результате будет инициирован GET-запрос к WEB-ресурсу.

  1. Нажмите кнопку «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
    }
 }

См. также:

Примеры использования iOS-фреймворка