api — вопросы с ответами

Интерфейс прикладного программирования (API) – это, к сожалению, перегруженный термин, который может относиться к нескольким различным вещам в зависимости от контекста.

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

Этот же цикл запроса/ответа используется при доступе к веб-страницам в вашем браузере. Основное различие между "запросом AP" и "запросом веб-страницы" заключается в том, какие данные предоставляются в ответе. Веб-сайт возвращает HTML, CSS и JavaScript, которые работают вместе с вашим браузером для отображения веб-страницы. Веб-API отвечают данными в необработанном формате, не предназначенными для преобразования браузером в пользовательский интерфейс. JSON и XML являются наиболее распространенными форматами, используемыми для этих необработанных данных, и оба являются гибкими текстовыми форматами для хранения данных. Почти все языки программирования имеют библиотеки, которые могут "анализировать" JSON и XML, что делает их удобными для разработчиков. Большинство современных API предпочитают JSON XML.

Интерфейс, реализация, экземпляры

Аббревиатура API означает интерфейс прикладного программирования. Мы используем интерфейсы, чтобы получить доступ к чему-то, что работает "за" API. Например, у вас может быть API, который выставляет задачи для управления учетными записями пользователей. Этот интерфейс может позволить разработчикам:

  • Встроить новый аккаунт;
  • Изменить существующий профиль учетной записи;
  • Изменить статус (приостановить или активировать) аккаунт.

Этот интерфейс обычно выражается с использованием общих протоколов, таких как HTTP, Thrift, TCP/IP и т. д., и использует стандартные форматы, такие как JSON, XML или HTML.

Но это только интерфейс. Есть что-то еще, что нам действительно нужно для выполнения запрошенных задач. Это то, что мы будем называть реализацией (implementation). Реализация является частью, которая обеспечивает фактическую функциональность. Часто эта реализация написана на языке программирования, таком как Java, C#, Ruby или Python. Продолжая пример учетной записи пользователя, реализация UserManagement может содержать возможность создавать, добавлять, редактировать и удалять пользователей. Эта функциональность может быть затем предоставлена с использованием интерфейса, упомянутого ранее.

Третий термин в нашем списке – это экземпляр (instance). Экземпляр API – это комбинация интерфейса и реализации. Это удобный способ рассказать о реальном запущенном API, который был выпущен в производство. Мы управляем экземплярами, используя метрики, чтобы убедиться, что они исправны. Мы регистрируем и документируем экземпляры, чтобы разработчикам было легко находить и использовать API для решения реальных проблем. И мы защищаем экземпляр, чтобы убедиться, что только авторизованные пользователи могут выполнять действия и считывать/записывать данные, необходимые для того, чтобы эти действия стали возможными.

Пример сырых данных API

Поскольку веб-API использует HTTP-запрос, вы можете запросить общедоступный API (то есть тот, который не требует аутентификации/входа в систему) прямо в браузере. Reddit имеет общедоступный JSON API, который предоставляет "сырые данные" без каких-либо CSS, HTML и JavaScript, которые используются для создания пользовательского интерфейса. Попробуйте открыть эту ссылку в новой вкладке: https://www.reddit.com/r/all/.json (вы можете добавить /.json к любой ссылке на Reddit). Вы увидите определенный вид форматированного текста, это объектная нотация JSON или JavaScript, и это более сырая версия информации, которую вы можете увидеть по адресу https://www.reddit.com/r/all/.

Firefox добавил инструменты, чтобы сделать JSON более удобным для пользователя, упрощая чтение данных и добавляя уровень интерактивности для изучения необработанных данных. В этом браузере вы должны увидеть что-то вроде этого:

Эти необработанные данные представляют собой сообщения на https://www.reddit.com/r/all и предназначены для анализа компьютерной программой, а не человеком. Программа не должна быть сложной, давайте рассмотрим простой пример, даже если вы не программист:

В этом примере определяется функция, которая использует другие встроенные функции JavaScript для "извлечения" тех же данных, которые мы только что изучили с https://www.reddit.com/r/all/.json. Здесь fetch – это и английский глагол, и встроенная функция, предоставляемая JavaScript, чтобы помочь разработчикам делать HTTP-запросы. Мы "await" данных, что займет некоторое время, чтобы получить их от Reddit и отправить нам. Затем мы перебираем "children", записывая заголовок и URL каждого отдельного дочернего элемента в консоль. В этом случае каждый "children" (child – сообщение в Reddit) является частью определения Reddit API. Каждый API должен определять свой собственный формат для данных, которые он обслуживает. Разработчики обычно читают документацию, предоставляемую сопровождающим API (в данном случае Reddit), чтобы узнать формат данных и правильно их использовать.

Зачем использовать API?

Для Reddit доступность необработанных данных позволила сторонним разработчикам выпускать приложения для телефонов, которые отображают те же данные с настраиваемым представлением. Многие другие API созданы с намерением позволить сторонним разработчикам создавать интересные приложения, используя данные компании. Spotify даже демонстрирует некоторые такие приложения на своем веб-сайте. Приложения, которые "потребляют" данные API, иногда называют интеграциями API. Например, менеджер по продукту может попросить инженера-программиста "написать интеграцию API, которая использует API Salesforce и сохраняет данные в нашей базе данных аналитики на месте".

Некоторые API, такие как API Reddit и Spotify, предназначены для расширения сферы охвата организации, делая их данные доступными для пользователей и позволяя внешним разработчикам создавать продукты, которые каким-то образом зависят от бизнеса, и таким образом заставляют клиентов возвращаться. Например, в Spotify появился "artist explorer" в надежде, что пользователи найдут новых художников, создадут новые плейлисты и, следовательно, продолжат (или начнут) использовать Spotify.

Другие API, такие как Salesforce API, являются частью пакета, который продается компаниям. Компании, которые оплачивают услуги Salesforce, видят в существовании API дополнительную ценность, потому что у них могут быть свои инженеры-программисты, которые создают интеграцию, которая выполняет две вещи:

  1. Отправляет данные из своих собственных программных продуктов (таких как веб-сервер или система точек продаж) непосредственно в Salesforce, обновляя данные "в облаке".
  2. Передает данные "из облака" в их собственные программные системы (такие как система отчетности или внутренняя база данных).

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

Еще одним преимуществом веб-API является то, что, поскольку они построены на протоколе HTTP, практически любой язык программирования может использоваться для доступа к ним. Python, R, Java, Ruby и любой другой язык программирования общего назначения имеют как минимум одну библиотеку HTTP, чтобы упростить этот процесс. Однако более специализированные языки, такие как SQL, не имеют библиотек HTTP.

Примеры популярных API

  • Facebook API обеспечивает платформу для создания приложений, которые могут использоваться членами сообщества Facebook. Разработчики могут создавать более привлекательные и интересные приложения, используя социальные связи и информацию профиля, предоставляемую этими API-интерфейсами. API-интерфейсы Facebook могут использоваться другими сторонними приложениями для публикации действий в новостной ленте и на страницах профиля Facebook в зависимости от настроек конфиденциальности отдельного пользователя;
  • Google API обеспечивает связь с такими службами Google, как поиск, перевод, Gmail, карты, социальные сети и реклама. Эти API могут использоваться разработчиками для создания приложений, расширяющих функциональность существующих сервисов;
  • Yelp API обеспечивает богатую информацию о местных компаниях по всему миру. Эти API могут улучшить приложение с помощью рейтинга Yelp, обзоров, фотографий и многого другого. API использует протокол RESTful, а ответы представлены в формате JSON;
  • Flickr API используется для создания приложений для обмена, редактирования и управления фотографиями на Flickr. Он состоит из набора вызываемых методов и некоторых конечных точек API. API использует протокол RESTful, а ответы представлены в формате XML и JSON;
  • Twitter предоставляет три типа API: API REST, API поиска и API потоковой передачи. API REST предоставляют программный доступ для чтения и записи основных данных об отдельных пользователях Twitter, их лентах новостей и обновлениях статуса. API поиска помогают получать твиты с определенными фильтрами. API потоковой передачи непрерывно доставляют новые ответы на запросы API REST через долгоживущее HTTP-соединение.
2 ответа
В Laravel 5.3 API-маршруты были перемещены в файл api.php. Но как я могу назвать маршрут в файле api.php? Я попытался создать такой маршрут: Route::get('/test',function(){ return "ok"; }); Я пробовал следующие URL-адреса, но оба возвращали исключение NotFoundHttpException: http://localhost:8...
laravel-5.3
16 сен. 2016, в 21:45
4 ответа
Я хочу создать немодальный всплывающий диалог в VBA 7.0. Пока что наиболее перспективным маршрутом является CreateDialog. Сначала я попробовал CreateDialogW и получил Entry point not found for CreateDialogW in DLL. После открытия DLL я подтвердил, что эта функция не указана. Ссылка на MSDN, приведе...
dialog
07 нояб. 2014, в 21:29
11 ответов
Я создал небольшой API с помощью Node/Express и пытаюсь извлечь данные с помощью Angularjs, но поскольку моя html-страница работает под apache на localhost: 8888 и node API прослушивает порт 3000, я получаю No 'Access-Control-Allow-Origin'. Я пробовал использовать node -http-proxy и Vhosts Apache, н...
express
rest
cors
19 авг. 2013, в 09:39
5 ответов
Я пробовал получать данные POST из моего API, но я не могу передать базовую аутентификацию... Я пытаюсь: $.ajax({ type: 'POST', url: http://theappurl.com/api/v1/method/, data: {}, crossDomain: true, beforeSend: function(xhr) { xhr.setRequestHeader('Authorization', 'Basic ZWx1c3VhcmlvOn...
cross-domain
16 авг. 2013, в 02:23
2 ответа
Мне нужно загрузить CSV файл с веб-сайта с помощью VBA в Excel. Сервер также должен был аутентифицировать меня, поскольку это были данные из службы опроса. Я нашел много примеров, используя Internet Explorer, управляемый VBA. Однако это были в основном медленные растворы, и большинство из них также ...
csv
download
26 июль 2013, в 09:41
7 ответов
Я разрабатываю приложение Laravel 4, которое будет выполнять те же операции CRUD в моем наборе данных, доступные через API JSON REST и веб-интерфейс. Похоже, что для предотвращения нарушения принципа DRY мой пользовательский интерфейс должен использовать собственный API, перенаправляя все запросы из...
rest
laravel-4
13 май 2013, в 12:18
3 ответа
Как вернуть модель Eloquent в браузер как JSON? В чем разница между этими двумя способами ниже? Оба, похоже, работают. # 1: return Response::json($user->toArray()); # 2: return $user->toJson();
laravel-4
24 март 2013, в 18:45
7 ответов
Здравствуйте, я создаю API, используя REST и Laravel, после этой статьи. Все работает хорошо, как ожидалось. Теперь я хочу отобразить запрос GET для распознавания переменной с помощью "?". Например: domain/api/v1/todos?start=1&limit=2 Ниже приведено содержание моих маршрутов .php: Route::any('ap...
rest
26 фев. 2013, в 03:28
9 ответов
Я надеюсь, что это не встречается как глупый вопрос, но его всегда то, что я задавал себе вопрос. И Windows (API Win32), и OS X (Cocoa) имеют свои собственные API-интерфейсы для обработки окон, событий и других материалов ОС. Я никогда не получал четкого ответа относительно того, что эквивалент Linu...
user-interface
03 окт. 2012, в 22:29
7 ответов
Я пытаюсь установить заголовок Content-Type объекта HttpClient, как того требует API, который я вызываю. Я попытался установить Content-Type, как показано ниже: using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri("http://example.com/"); httpClient.DefaultRequestHeade...
rest
http
21 май 2012, в 05:22
10 ответов
Наш клиент предоставил мне REST API, для которого мне нужно сделать PHP-вызов. Но на самом деле документация, предоставленная с API, очень ограничена, поэтому я действительно не знаю, как вызвать службу. Я пытался использовать это Google, но единственное, что появилось, - это уже истекший Yahoo! о т...
rest
web-services
21 март 2012, в 10:05
4 ответа
Скажем, у меня есть RESTful API, работающий на сервере где-то, а также отдельный, но связанный с ним сайт Wordpress. Я хочу иметь некоторые страницы на сайте WP, которые показывают данные на страницах WP, которые были получены с сервера REST (в формате JSON), и позволяют пользователю просматривать и...
plugins
rest
08 дек. 2011, в 23:30
7 ответов
Почему вы используете один над другим, чтобы выставлять API для вашего приложения Django? http://pypi.python.org/pypi/djangorestframework/ http://pypi.python.org/pypi/django-tastypie
rest
django-rest-framework
05 сен. 2011, в 03:49
2 ответа
Я пытаюсь собрать простой RSS-виджет (для моего блога wordpress), который покажет список акций или рынков и их текущие цены. Я не могу найти API для этих данных в любом месте - может ли кто-нибудь предложить такую ​​вещь (возможно, как RSS-канал?)
19 июль 2009, в 14:17
10 ответов
По какой-то причине я не могу найти способ получить эквиваленты интерактивных команд оболочки sqlite: .tables .dump с использованием API-интерфейса Python sqlite3. Есть ли что-нибудь подобное?
20 нояб. 2008, в 14:29
Наверх
Меню