Как получают API?
===================

 Здравствуйте, вопрос может показаться не понятным, но я новичок в этом деле и до конца не понимаю, что значит API в целом и как его получить.  

  

Мой знакомый рассказал в кратце, как получить какие-то запросы, с помощью которых можно будет взаимодействовать с сервером (или с приложением ), но их нужно найти в пакетах данных и если они зашифрованы, то нужно разобрать приложение и найти генератор ключа дешифровки… А потом я вообще ничего не понял.  

  

Пожалуйста, расскажите простыми словами (аналогии приветствуются) что вообще происходит с этим API и что это вообще?   

Что за запросы и как их можно получить, если код программы изменился и старые запросы (API, я просто не знаю как правильно поставить вопрос) стали недоступны?  

  

Если понадобиться, то приложение на Java. 

 Wiki  

> API (программный интерфейс приложения, интерфейс прикладного программирования) (англ. application programming interface, API [эй-пи-ай][1]) — **описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой**

  

  

По простому  

API - это набор правил, по которым можно наладить связь между разными системами. Это то, что предоставляет некоторый сервис. Он же и разрабатывает его и он же даёт его в пользование.   

  

Пример с той же погодой. Есть сервис - Погода. Он решил, что может предоставлять данные о погоде всем желающим.   

Ты скажешь - "ну вот у них же сайт есть и там всё написано", но чтоб использовать данные о погоде в собственной программе придётся "парсить" целую страницу. Это не удобно, затратно и нестабильно.   

Для этого разработчики разрабатывают набор правил, в данном случае - запросов. Выполнение которых будет возвращать строго определенную информацию.  

Это же API может позволять вносить/модифицировать и удалять информацию (REST).  

  

API как правило - это документация. Пример такой документации (API) для погоды - <https://openweathermap.org/current>  

  

Если углубиться в вопрос, то ты столкнёшься с такими понятиями как **токен** или **ключ**, которые определяют **уровень доступа** к методам API. Некоторые API могут работать без таких вещей, но по большей части все используют токены. Хотя бы номинально.  

  

API - позволяет делать только то, что реализовали разработчики. И если они не добавили методы, например, установки значения текущей температуры - ты не сможешь её изменить.  

  

Ещё один момент, касательно топика - это не путать API и эмуляцию запросов с сайта сервиса. Т.е. смотреть, что вызывает сайт при работе ("искать в пакетах") и вызывать то же самое - это не API.  

  

**Дополнительно**  

API - это не только про запросы. API - более широкое понятие нежели доступ к серверу.   

Через API работают, например, все программы в Windows - WinAPI. Через API программы взаимодействуют между собой. Плагины в браузере используют API браузера для работы с плагинами.   

 

![d9a5c7a5629a4580bdf07dbe4882ca2a](https://habrastorage.org/extt/60/de/75/60de75b94743d631760113.)  

Я приведу самый простой пример с получением данных. По сути, у API возможности неограниченны. Всё что хочешь - то и можно. Просто чаще всего API используют, чтобы получить какие-то данные.  

  

Принцип такой:  

Есть сайт с погодой. Чтобы получить температуру в условном Питере, которую они замерили - тебе нужно зайти к ним на сайт, вбить в параметрах поиска СПБ и глазами посмотреть.   

И вот, чтобы обеспечить потребность "знать погоду" - тебе достаточно просто заходить к ним на сайт. Но если ты хочешь, чтобы на твоём сайте/приложении/в игре - была погода, то тут возникнут проблемы  

  

- По сути ты мог бы просто каждые 10 минут заходить на сайт погоды, брать от туда данные и загружать себе на сайт. Согласись - неудобно.   

- Либо ты мог бы настроить бота, который бы заходил на сайт, симулируя пользователя и доставал бы из нужного блока температуру, а потом вставлял результаты тебе на сайт. По сути, так и делают, когда нет API, но это не совсем стабильный канал: а) тебя могут забанить по ip за странные запросы; б) если изменится вёрстка сайта (порядок блоков), то разумеется достать температуру ты уже не сможешь и придётся переписывать бота  

- И тут на помощь приходит API. Принцип таков: ты можешь договориться с поставщиком температуры о том, что ты будешь брать у них данные. Это может быть как платная услуга, так и бесплатная (обычно зависит от кол-ва запросов). В итоге тебе дают ссылку, в которой указаны уже все параметры, которые тебе нужны и ты просто настраиваешь своего бота на то, чтобы получить эти данные по ссылке и вставить на свой сайт.   

  

Чтобы посмотреть температуру в Санкт-Петербурге тебе нужно открыть ссылку:  

```
http://api.openweathermap.org/data/2.5/weather?q=Санкт-Петербург&units=metric
```
**нихрена работать не будет, потому что тут не указан ключ API.**  

  

**А зачем нужен ключ API?**  

Как я уже сказала: API бывают платные и бесплатные и их платность зависит **обычно** от кол-ва запросов, которые ты делаешь. Но как поставщик узнает, кто делает запрос: я, ты или тот парень? Чтобы регулировать это - они присваивают тебе твой личный номер (айди), по которому они будут отслеживать, сколько запросов ты уже сделал. Также в твоём айди закладываются твои права. Может быть посмотреть погоду в Питере - бесплатно, но вот если ты хочешь узнать точную температуру в условном Кудрово, то будь добр - доплати и тогда они предоставят по твоему айди доступ к этой температуре. Кратко: API-ключ - пароль от твоего аккаунта.  

  

И вот тебе верная ссылка:  

```
http://api.openweathermap.org/data/2.5/weather?q=Санкт-Петербург&units=metric&appid=0f47096f1eb155f8b277692876fb963e
```