Рубрики
Uncategorized

Swift — Напишите краткий сетевой код с WS☁️

Ходить за вами через писать краткий сетевой код, используя силу обещаний и дженериков!

Автор оригинала: Sacha Durand Saint Omer.

В этой статье мы собираемся пройти шаг за шагом, что требуется для получения Пользователь Объекты из JSON API в SWIFT3, используя ☁️ws библиотека.

Что такое WS?

WS это быстрое библиотека для написания Краткий сетевой код.

WS Используйте силу других библиотек, чтобы создать сеть ветерок. Под капотом он использует великий AlamoFire Для HTTP-запросов 🎬. тогда для популярной концепции обещания и 🏹arrow для простого разбора JSON.

Эта архитектура модульная нарочно, так что каждый «кирпич» DOE_S_ Одна вещь и делает это хорошо.

Если вы хотите пойти глубже в внутреннюю работу WS. , вы можете оформить заказ:

Давайте вернемся, пожалуйста, мы?

Установка

Если вы хотите следить за этим руководством на XCode, убедитесь, что создайте новый проект iOS и установить WS. Как объяснено здесь С Обе карнаген и какоаподы поддерживаются

Отключение безопасности приложений (ATS)

Здесь мы будем использовать великую Jsonsholder Сервис, чтобы получить несколько пользователей JSON https://jsonplaceholder.typicode.com/users

Чтобы иметь возможность обработать запросы к этому домену, нам нужно обходить настройки безопасности приложений в наших .plist файл так:

⚠️ Иметь в виду, что эта настройка ATS предназначена для тестирования цели и не предназначена для производства приложения _

Ремесло нашего API

Начните с создания нового SWIFT файла с именем Api.swift. Это инкапсурует весь наш код API:

import ws
import then   // Needed to import Promise Type
import Arrow  // Needed to import JSON Type
let api = Api() // Define global api
struct Api {
    
    // Connect to the base URL
    private let ws = WS("http://jsonplaceholder.typicode.com")
    
    // Declare your route and what you want back, here some JSON
    func getUsers() -> Promise {
        return ws.get("/users")
    }
}

И теперь вы можете позвонить вашему API с контроллера просмотра, как это:

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
      
        api.getUsers().then { json in
            print(json)
        }   
    }
}

Вау, это было легко, не так ли?

Да, но большую часть времени, в ваших приложениях, вы захотите использовать пользовательские быстрые модели. Хорошо, так что теперь мы собираемся увидеть дальше, как мы переводим JSON в наш приятный User.swift модель.

Настраивать Модель разбор

Создать User.swift Файл и добавьте Имя пользователя имущество.

struct User {
    var username = ""
}

Создать Пользователь + json.swift Файл и сопоставить ключ json к вашей модели модели:

import Arrow

extension User: ArrowParsable {

    mutating func deserialize(_ json: JSON) {
        username <-- json["username"]
    }
}

Это все, что нужно, чтобы описать, как разбирать Пользователь объект на данный момент.

Теперь измените предыдущий API.SWIFT Файл и сделать функцию GetUsers () возвращает Обещание <[Пользователь]> вместо Json.

import ws
import then

let api = Api()

struct Api {
    
    private let ws = WS("http://jsonplaceholder.typicode.com")
    
    func getUsers() -> Promise<[User]> { // We want [User] back!
        return ws.get("/users")
    }
}

Да! Это единственное, что нужно изменить! Сейчас WS. автоматически попытается разобрать ответ в массив Пользователь Объекты 🎉!

Давайте использовать его в нашем контроллере тогда!

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        api.getUsers().then { users in
            for u in users {
                print(u.username)
            }
        }   
    }
}

Бонус — обрабатывать ошибки

Как вы знаете, все не всегда работают, как мы намерены И нам нужно подготовить себя к худшему. Так что, если запрос не удается, например,?

Вот где приходит сила обещаний:

api.getUsers().then { users in
  // strongly typed [User] !
}.onError { e in
    print(e) // Handle any networking error that might happen
}.finally {
    print("Whatever happens I'll be executed ")
}

Просто цепи .onerror Блок там И это будет призвано с соответствующей причиной, когда случается что-то не так!

Заключение

С примерно 20 строк кода у вас есть:

  • Подключен к далеку JSON API
  • Получил JSON обратно
  • Проанализировал JSON в ваши модели
  • Способ обрабатывать сбои, когда худшее происходит

Это так же, как я думаю,

Конечно, намного больше WS Можно сделать: обрабатывать параметры, вложенные модели, пост, поставить, удалить запрос, умножать загрузки, прогресс, запросы нагрузки … Но это не имеет возможности этой статьи.

Больше доброта ❤️.

☁️ws является частью серии легких библиотек, направленных на разработку IOS Apps A ветер. На Свежевы Мы процветаем для простых API, так что идите о проверке наших репо счастливый кодирование

Особая благодарность Максконовава и Yanickdot для корректора

Если вам понравилась эта статья, нажмите сердце ❤ ниже, который много значит для нас!

Первоначально опубликовано здесь

Оригинал: «https://www.codementor.io/@sachadso/swift-write-concise-networking-code-with-ws-ddjbdgm8q»