# API (Application Programming Interface – интерфейс программирования приложений, интерфейс прикладного программирования)

API в данной структуре служит местом соприкосновения компонентов (клиента и сервера). Зачастую приводят пример с рестораном. Вот Вы (клиент) пришли в ресторан и сели за стол. Ваша цель получить те или иные блюда. К Вам подходит официант (API) и принимает заказ (запрос к серверу). Далее официант подходит к повару (сервер) и говорит, что нужно приготовить. Повар открывает холодильник (база данных), берет нужные продукты, готовит блюда (ответ сервера), зовет официанта и отправляет блюда клиенту.

По сути, API - это договор/контракт по взаимодействию между компонентами системами.

 **API** — это интерфейс (совокупность способов, средств, правил и возможностей взаимодействия кого-либо или чего-либо с кем-либо или чем-либо).

У сервера свои правила и обязанности:

* Обращаться ко мне следует по определенному протоколу (например, HTTP).
* Я готов принимать данные в определенном формате (например, JSON).
* В запросе должны присутствовать определенные обязательные поля (например, name, age).
* Эти поля должны содержать данные определенного типа (например, строки и числа) и так далее.

В свою очередь, у клиента свои правила:

* Я ожидаю ответ в конкретном формате.
* Я ожидаю ответ в определенной кодировке и так далее.
* У баз данных также есть свои правила:
    
    Она понимает только [SQL](/2%20ComputerScience/2.6%20Database/2.6.1.%20MySQL/).
    * Для запроса информации используйте SELECT.
    * Для внесения информации используйте INSERT INTO и так далее.
    * При соблюдении всех договоренностей и правил взаимодействия между компонентами, система будет функционировать корректно.

## Виды работы с API

* [RestAPI](./2.3.1.2%20RestAPI.md);
* [WebSocket](/2%20ComputerScience/2.3%20Networking/2.3.2%20Web/2.3.2.6%20WebSocket.md);
* [gRPC](/2%20ComputerScience/2.3%20Networking/2.3.2%20Web/2.3.2.3%20Protocols.md);
* [SOAP](https://github.com/eldaroid/iTWiki/blob/master/2%20ComputerScience/2.3%20Networking/2.3.1%20API/2.3.1.2%20RestAPI.md#rest-api-vs-soap-api-vs-graphql); 
* [GraphQL](https://github.com/eldaroid/iTWiki/blob/master/2%20ComputerScience/2.3%20Networking/2.3.1%20API/2.3.1.2%20RestAPI.md#rest-api-vs-soap-api-vs-graphql); 

### Клиент-серверная архитектура

Для понимания API важно знать о взаимодействии ПО. Рассмотреть, как это устроено и какую роль играет API можно [здесь](/2%20ComputerScience/2.4%20Architecture/2.4.1%20ArchitecturalDimensions(Application,%20Network,%20Infrastructure).md)

---

[2.3 Networking Folder Theme](/2%20ComputerScience/2.3%20Networking/) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [2.3.1.2 Rest API Theme](./2.3.1.2%20RestAPI.md)
