SlideShare a Scribd company logo
(NOT) EASY WAY TO SET UP
IN-APP NETWORKING
GENERICS + DECODABLE
SERVING YOUR API CLIENT
<T>
Vitaly Chernysh
О чем поговорим?
COMMON
NETWORKING
PROBLEMS
DECODABLE
GENERIC
NETWORKING
CLIENT
CLIENT
INSTRUCTIONS
ERROR

HANDLING
"Generics+Decodable serving your API-client"
DECODABLE
public protocol Decodable {
public init(from decoder: Decoder) throws
}
DECODABLE
{
"quoteText":"If I know what love is, it is because of you. “,
"quoteAuthor":"Hermann Hesse”
}
DECODABLE
STATIC METHODS
– отсутствие конкретного объекта и состояния
– притягивают статики
– отсутствие возможности для DI
– повторяющийся код
PROS:
– удобно при небольших проектах
CONS:
– доступность из любого места в приложении
– нет разделения ответственностей
SHARED INSTANCE
– повторяющийся код
PROS:
CONS:
– наличие конкретного объекта
– возможность для DI
– сетевой слой зависит от структуры приложения
– нет разделения ответственностей
"Generics+Decodable serving your API-client"
CLIENT OF FUTURE
– потенциально переносим в другие проекты
– возможность иметь несколько клиентов
– возможность для DI
– отсутствие повторяющегося кода
– разделение ответственностей
– клиент ничего не знает о структуре приложения
– удобен в использовании
GENERIC CLIENT
RESULT
INSTRUCTION
performRequest<T>()
Request<T>
Request<T>
Request<T>
Request<T>
Request<T>
completedWithObject<T>
failedWithError
GENERIC CLIENT
– несет ответственность только за выход в сеть и обработку полученных данных
– ничего не знает о структуре приложения
– имеет унифицированные completion и error обработчики
– вместе с инструкцией получает ее ассоциативный тип
– передает этот тип в Сompletion
GENERIC CLIENT
REQUEST
– HTTP метод
– path
– parameters
– generic-типизация (associated types должны реализовывать Decodable)
– headers
Что включает?
REQUEST
COMPLETION
– получает associated type из Реквеста
– назначает его как тип возвращаемых объектов
CLIENT
"Generics+Decodable serving your API-client"
JSON
Создадим свой класс JSON, который реализует Decodable.
Научим наш JSON разворачивать пришедший с сервера словарь,

а затем записывать содержимое в Dictionary<String : Any>
Теперь можно передавать JSON в associated type Реквеста и получить 

обработанный словарь со всем содержимым на выходе работы клиента.
Requests Library
External call example
Error Handling
ERROR?
RESPONSE
Error Handling
Error Handling
CLIENT
EXTRACTOR
Error Extractor
– проверка внутренних ошибок сериализации
– проверка серверных ошибок в словаре
Источники:
SPASIBO
SERVICE-ORIENTED ARCHITECTURE SHARED INSTANCE DECODABLE MEAT GRINDER

More Related Content

PDF
Mera Dev Fest - Swift vs. Obj-C
PDF
Swift School #2
PDF
Обзор ES2015(ES6)
PDF
Игорь Кашкута
PDF
Александр Зимин (Alexander Zimin) - Protocol-Oriented Programming
PDF
Архитектура в Agile: слабая связность
PDF
Scala and LiftWeb presentation (Russian)
PDF
Семь тысяч Rps, один go
Mera Dev Fest - Swift vs. Obj-C
Swift School #2
Обзор ES2015(ES6)
Игорь Кашкута
Александр Зимин (Alexander Zimin) - Protocol-Oriented Programming
Архитектура в Agile: слабая связность
Scala and LiftWeb presentation (Russian)
Семь тысяч Rps, один go

More from ITCP Community (20)

PPTX
"Best Practices for Designing a Pragmatic RESTful API
PDF
"You shall not pass : anti-debug methodics"
PDF
Парадигмы программирования
PDF
Лайфхаки группового собеседования
PDF
Бла бла-бла поговорить или структура “неструктурированного” интервью
PDF
Метрики
PDF
Не все святой скрам
PDF
Самоорганизующиеся команды
PDF
Управление содержанием проекта
PDF
Таргетированная реклама в Facebook
PDF
Финансовое планирование бюджета IT-компании
PDF
Вам упаковать?
PDF
Клиент всегда прав?
PDF
Общение с клиентами на автопилоте
PDF
Kонтент решает все (почти)
PDF
Electron
PDF
It is a Test
PDF
Продукт с нуля
PDF
Storytelling in the Digital Age
PDF
Место карьеры в мире дизайна
"Best Practices for Designing a Pragmatic RESTful API
"You shall not pass : anti-debug methodics"
Парадигмы программирования
Лайфхаки группового собеседования
Бла бла-бла поговорить или структура “неструктурированного” интервью
Метрики
Не все святой скрам
Самоорганизующиеся команды
Управление содержанием проекта
Таргетированная реклама в Facebook
Финансовое планирование бюджета IT-компании
Вам упаковать?
Клиент всегда прав?
Общение с клиентами на автопилоте
Kонтент решает все (почти)
Electron
It is a Test
Продукт с нуля
Storytelling in the Digital Age
Место карьеры в мире дизайна
Ad

"Generics+Decodable serving your API-client"