LINUX.ORG.RU

Объясните в общих словах как работают современные Web API

 , webapi


0

2

Хочу понять один момент.

Вот, например, есть Vk, и есть альтернативный клиент для него (для Android) Kate.

Kate использует API Вкoнтактa.

Не очень представляю пока что такое API в вебе, но наверное это отправление некоторого запроса, допустим упакованного в json объект и получение json ответа, но главный вопрос у меня не про то как устроено API.

А с тем почему приложения подобные Kate от него зависят, как я понял, более чем полностью.

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

Так вот мне не понятен момент - есть же веб-версия, полнофункциональная.

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

★★★★★

Последнее исправление: bonta (всего исправлений: 1)

Не знаю что там у вконтакта, надо конкретно смотреть.

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

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

Для себя сойдет, для пользователей – нет

masa ★★
()

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

Потому что парсить постоянно меняющуюся веб-страницу и реверсить запросы – это совсем другой уровень трудозатрат?

MoldAndLimeHoney ★★
()

Не очень представляю пока что такое API в вебе, но наверное это отправление некоторого запроса, допустим упакованного в json объект и получение json

Апи это прежде всего некая задокументированная вещь. То есть есть некие гарантии, что эти вещи или меняться вообще не будут, или об этом будет известно. Способ получения/отправки данных вещь вторичная.

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

Браузер это не только отправку и получения данных. У него еще есть скриптовый язык (javascript). Браузер может хранить и передавать данные сайтов (cookie). А еще есть правила отображения элементов (css). Способов сделать так, чтобы браузер прошел верификацию, а программа нет очень много. Я натыкался на «капчу», в которой надо было выполнить JS код, который с использованием css смотрел является ли блок отображаемым или нет. Чтобы обойти эту капчу, нужно написать свой браузер.

dicos ★★★
()
Последнее исправление: dicos (всего исправлений: 1)
Ответ на: комментарий от MoldAndLimeHoney

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

anonymous
()
Ответ на: комментарий от dicos

Чтобы обойти эту капчу, нужно написать свой браузер.

Или использовать имеющийся в headless режиме (chrom/chromium позволяет) или даже управлять gui автоматически, программы такие еще в начале нулевых точно были. Но это все борьба снаряда и брони.

anonymous
()

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

Ни в чём. Просто там инвалиды кодят. Ну а кто ещё будет писать клиенты для соцсетевого мусора? Нормальным людям оно ненужно.

firkax ★★★★★
()
Ответ на: комментарий от anonymous

Или использовать имеющийся в headless режиме (chrom/chromium позволяет) или даже управлять gui автоматически, программы такие еще в начале нулевых точно были.

Скорее тут вопрос а так ли нужно для мессенджера еще запускать в фоне браузер

dicos ★★★
()

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

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

Да и так мало ли чего, всё так сервис частный.

Ygor ★★★★★
()
Ответ на: комментарий от bonta

Я не знаю что такое токен для веба, но если он есть в браузере, то в чем сложности быть не в браузер? Расскажите в двух словах.

Токен - это цифровая подпись, которая сообщает серверу, что этот запрос можно или нельзя обрабатывать, и права на какой функционал у него есть. Т.е без этого токена все ваши запросы будут отброшены. Токены генерируется на стороне сервера, когда пользователь приобретает доступ к апи. Например захотели вы установить в свой иде подсказчик ии - придется идти на сайт ии регистрироваться, получать токен, вставлять его в настройки. По этому токену владелец ии, выставляет вам счет за услуги.

Silerus ★★★★
()

А с тем почему приложения подобные Kate от него зависят, как я понял, более чем полностью.

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

Они зависят от API потому, что кроме API нет каналов доступа к VK. Ты просто физически зависишь от единственного предоставленного отверстия, в которое можно свистеть и из которого может дуть в ответ.

lesopilorama
()

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

Проблема в том, что любое кривое нестабильное API в 100500 раз стабильнее того, что будет происходить «в браузере». Браузер обычно работает не через API, а через любую комбинацию произвольных способов, какие технически оказались возможны на момент реализации: что-то запросил через «обычный HTTP», что-то через websocket, что-то через кусок того же API, а что-то просто в HTML приехало с сервера само. И в любой момент любая хрень из этого месива может поменяться. Это настолько жопный геморой (отслеживать как это всё работает), что любое жопное API в разы проще, какое бы кривое оно не было.

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 2)

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

Да, всё так. На веб-страничке VK продолжает работать поиск по музыке, а в API убрали метод «vkAudioSearch», потому что по официальной статистике этот метод никому не нужен. То, что он нужен полутора калекам, таким как авторы Kate (или как там его) - их волнует мало, потому что Kate им не платит миллион в год.

lesopilorama
()
Ответ на: комментарий от Silerus

Токен - это цифровая подпись,

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

Токен - это просто любое рандомное число, сгенерированное сервером VK для данного клиента и для этого числа в СУБД VK лежит строчка, говорящая о том, что для данного числа имеются такие-то доступы. Ни к какой криптографии это отношения не имеет. Я генерирую число вида «BnYtfgaa6gMMn» и кладу его в базу, а напротив этого числа ставлю, что оно даёт доступ ко всем действиям от имени uid = 81917283. Ты приходишь с числом BnYtfgaa6gMMn в запросе и выглядишь для меня как пользователь 81917283. Я удаляю число BnYtfgaa6gMMn из базы и ты теперь владеешь тухлым токеном, который ничего не может и его можно выкинуть. Ни в каком месте этой схемы ничего из наук с названием «крипто***» не участвует.

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 3)
Ответ на: комментарий от masa

Неверно, логин пароль - тоже цифровая подпись

Неверно. У цифровой подписи строго фиксированное определение - это число, криптографически согласованое с некими данными, которые оно «подписывает» так, что можно проверить валидность и принадлежность этой подписи.

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от vbr

Принципиальных проблем нет,

Есть. Капча. Я собираюсь пересобирать firefox и выпилить все идиотские заголовки, которые отправляются под управлением webdriver'а, например, чтобы API сайтов нормально пользоваться бес ручного копирования токенов и кук.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 3)
Ответ на: комментарий от vbr

Ну, у меня сейчас на работе поставщик данных не даёт открытый API, но не возражает скачивать всё, что нужно. А токен делает только после загрузки RECaptcha. А она потребует телодвижений, если увидит, что я пытаюсь через webdriver токен получить.

Shadow ★★★★★
()
Ответ на: комментарий от lesopilorama

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

Silerus ★★★★
()
Ответ на: комментарий от Silerus

Это не просто случайное число, а уникальное число, которое жестко связано в базе с учетной записью, т.е это уже некий hash…

Нет, это именно случайное число, прям совсем случайное:

N = rand256();

Далее ты просто вставляешь в базу строку из 2 колонок:

(N, UID)

Если строка не вставилась, потому что N уже был (вероятность исчезающе мала в силу 256 битности), то ты просто делаешь генерацию рандома ещё раз.

Если бы это было хешом, то это бы ничего не решало и не чинило. В хеш бы пришлось всё равно добавлять какую-то соль, чтобы не давать возможности атакующему генерировать такой хеж дома на ноутбуке, зная данные пользователя. А если утечёт соль? Нафиг надо, ещё соль охранять. Проще рандомчик бахнуть.

lesopilorama
()