Создайте свой собственный менеджер API без использования Alamofire в Swift

Простой способ вызова любого API в вашем проекте Swift — iOS без использования сторонних библиотек

Давайте начнем с простого, а позже мы добавим все, что сделает нашу библиотеку идеальной. Сначала нам нужно создать наш класс. В этом уроке мы назовем его «ServiceManager», и он должен быть синглтоном. После создания нового файла нам нужно создать нашу первую функцию под названием «callService», которая должна предоставлять только объекты, необходимые для выполнения нашего запроса.

Так класс должен выглядеть в начале

Наша функция примет в качестве входных данных строку urlString, которая может быть чем-то вроде «https://www.google.com» или API, который вам нужно вызвать.

Мы будем использовать URLSession и URLRequest для создания нашего менеджера. URLSession — это простой синглтон, а URLRequest — это тот, который нам нужен для добавления всех значений для нашего запроса. В настоящее время мы устанавливаем GET только для httpMethod (это означает, что мы пока не можем отправлять httpbody) и добавляем простой заголовок «Accept» со значением «application/json» (это один из наиболее распространенных заголовков, которые вам нужно добавить).

Если вам нужно опубликовать некоторые данные, вы должны изменить GET на POST и использовать request.httpBody = <ваш объект данных>

При вызове session.dataTask наш запрос будет отправлен, и мы получим данные в качестве ответа.

Давайте попробуем вызвать нашу первую простую функцию на примере API покемонов (https://pokeapi.co/).

так должен выглядеть наш ViewController, вызывающий наш ServiceManager. После запуска мы получаем от сервера сообщение «1417 байт», что означает, что нам нужно обработать 1417 байт данных. Но давайте посмотрим вместо размерности данных реальную строку, которую мы получили. Перед печатью данных добавьте следующую строку:

let str = String (декодирование: данные, как: UTF8.self)
print(str) // здесь вы увидите полученный с сервера json

После запуска нашего приложения мы видим это в наших журналах:

мы получили список покемонов!!!

Давайте создадим нашу модель и посмотрим, как мы можем сделать нашу функцию для анализа декодируемых моделей.

это наша модель, на которую мы будем декодировать ответ. Теперь нам нужно проанализировать json-ответ на эту модель, и каким-то образом мы должны указать нашему контроллеру представления обновить данные или предупредить его об успешном выполнении запроса.

Объявление функции должно выглядеть так:

Использование дженериков «T» означает, что наша функция вернет объект в блоке успеха и просто вызовет блок отказа в случае ошибки. Давайте добавим часть анализа в нашу функцию и вызовем блоки успеха/неудачи. Вот как теперь должна выглядеть наша функция

JSONDecoder выполнит работу по разбору. Теперь давайте создадим новый файл с именем ApiManager, в котором будут храниться все наши вызовы API.

В ApiManager вы можете разместить свои сервисы. В этом примере мы будем использовать только один сервис с именем retrievePokemons. Теперь давайте изменим наш код в нашем ViewController.

Как вы видите, мы используем ApiManager для вызова нашего сервиса. В случае успеха мы просто напечатаем первое имя покемона в нашем списке из модели, которую мы видели ранее.

Если вы хотите добавить загрузчик при вызове этого API, прочитайте мою статью

И, наконец, давайте посмотрим на наш отладчик, чтобы увидеть, что было напечатано:

BULBASAUR — твой ПОКЕМОН!

Спасибо за чтение!