API (Application Programming Interface – интерфейс программирования приложений, интерфейс прикладного программирования)
API в данной структуре служит местом соприкосновения компонентов (клиента и сервера). Зачастую приводят пример с рестораном. Вот Вы (клиент) пришли в ресторан и сели за стол. Ваша цель получить те или иные блюда. К Вам подходит официант (API) и принимает заказ (запрос к серверу). Далее официант подходит к повару (сервер) и говорит, что нужно приготовить. Повар открывает холодильник (база данных), берет нужные продукты, готовит блюда (ответ сервера), зовет официанта и отправляет блюда клиенту.
По сути, API - это договор/контракт по взаимодействию между компонентами системами.
API — это интерфейс (совокупность способов, средств, правил и возможностей взаимодействия кого-либо или чего-либо с кем-либо или чем-либо).
У сервера свои правила и обязанности:
- Обращаться ко мне следует по определенному протоколу (например, HTTP).
- Я готов принимать данные в определенном формате (например, JSON).
- В запросе должны присутствовать определенные обязательные поля (например, name, age).
- Эти поля должны содержать данные определенного типа (например, строки и числа) и так далее.
В свою очередь, у клиента свои правила:
- Я ожидаю ответ в конкретном формате.
- Я ожидаю ответ в определенной кодировке и так далее.
- У баз данных также есть свои правила:
Я понимаю только SQL.
- Для запроса информации используйте SELECT.
- Для внесения информации используйте INSERT INTO и так далее.
- При соблюдении всех договоренностей и правил взаимодействия между компонентами, система будет функционировать корректно.
Для понимания API важно знать о взаимодействии ПО. Рассмотрим, как это устроено и какую роль играет API.
Клиент-серверная архитектура - это модель взаимодействия компонентов системы, где клиент (потребитель услуг) отправляет запросы серверу (поставщику услуг), который в свою очередь обрабатывает эти запросы и возвращает результаты обратно клиенту.
Клиент-серверная архитектура подразумевает разделение обязанностей выполнения тех или иных функций на различные части ПО.
В этой архитектуре выделяются 3 основных компонента:
- Клиент;
- Сервер;
- База данных;
Клиент – это та часть ПО, с которой взаимодействует пользователь. Например, когда Вы читаете этот текст в браузере или в мобильном приложении, Вы работаете с клиентской частью ПО.
Более формально - клиентом является любая программа способная отправлять запросы на сервер.
Обязанности клиента:
- отправка запроса на сервер
- получение ответа от сервера
- визуализация ответа
- хранение данных
Примеры клиентов:
- браузер ПК
- браузер смартфона
- мобильные приложения
- десктопные приложения
- умные часы и т.д.
Сервер – это компонент ПО, ответственная за логику обработки запросов от клиента. Сервер - это невидимая для пользователя часть ПО. В клиент-серверной архитектуре логика исполняется серверной частью.
Обязанности сервера:
- получение запроса от клиента
- обработка данных и запросов
- обращение в базу данных для получения, внесения, обновления, удаления информации
База данных — это компонент ПО, отвечающий за хранение данных. Также как и сервер, она невидима для пользователя. База данных получает от сервера запросы и возвращает ответы. Сервер обращается к реляционной базе данных и получает от неё ответ посредством языка структурированных запросов SQL.
Базы данных делятся на два основных типа:
- Реляционные: данные хранятся в таблицах и строках. Взаимодействие осуществляется при помощи SQL.
- Нереляционные (NoSQL): данные могут храниться в различных форматах, таких как "ключ-значение", документные, графовые и другие.
Основные функции баз данных:
- хранение данных;
- обработка запросов от сервера;
- отправка ответов серверу.
Для наглядности:
Выше перечислены основные сущности в клиент-серверной архитектуре. В клиент-серверную архитектуру также могут быть интегрированы прокси-серверы, CDN, балансировщики, кэши и иные компоненты.
Примечание №1.
Бывают исключения, когда клиент выполняет часть логики. Такие клиенты называются "Толстыми клиентами".
Толстый клиент - это клиент, который использует мощности устройства (оперативная память, процессор и т.п.). Например, приложение редактирования фото на смартфоне. Оно может работать без подключения к интернету. Вы локально можете запустить приложение, выбрать фото из альбома смартфона, отредактировать и сохранить фото в памяти смартфона. Вся логика выполняется на стороне клиента и все действия были сделаны благодаря ресурсам смартфона(в данном кейсе).
2.3 Networking Folde Theme | Back To iOSWiki Contents | 2.3.1.2 Rest API Theme