Апи
Содержание:
- Краткое введение в RAML
- Микросервисы со Spring Boot. Часть 5. Использование сервера имен Eureka
- Кто разрабатывает API-платформы и как они работают
- Инструкция по подбору партнера
- Интерактивное голосовое редактирование текста с помощью новых речевых технологий от Яндекса
- Индикатор раскладки клавиатуры цветом панели задач и заголовка окна в современных версиях Windows при помощи DWM
- Почему самоуничтожающиеся фотографии/видео в Telegram не безопасны
- FutoIn AsyncSteps: концепция и реализация асинхронной бизнес-логики
- Проектирование RESTful API с помощью Python и Flask
- Что такое REST?
- В VK добавили Callback кнопки для ботов
- Что сделано относительно исходной v11.80?
- Виды callback кнопок
- Что такое XML
- Под капотом бота-клиента Яндекс.Музыки
- Введение
- Удаляем статью
- API операционных систем. Проблемы, связанные с многообразием API
- CRUD операции с Entities в DialogFlow (C#)
- Как на архаичном рынке факторинга перевести все сделки в онлайн? Опыт «Сбербанк Факторинга»
Краткое введение в RAML
Вводная часть
- версия RAML;
- имя документа;
- URI, по которому доступен API;
- версия API, описываемая в документации.
#% RAML 0.8
title: Example API
baseUri: http://api.example.com/{version}
version: v1
protocols:
documentation
- title: Home
content: |
API Test Documentation
Схемы безопасности
#%RAML 0.8
title: Example API
version: 1
baseUri: https://api.example.com/{version}
securedBy:
securitySchemes:
- oauth_2_0:
type: OAuth 2.0
describedBy:
headers:
Authorization:
type: string
queryParameters:
access_token:
type: string
responses:
401:
description: |
Bad or expired token.
403:
description: |
Bad OAuth request
settings:
authorizationUri: https://example.com/oauth/authorize
accessTokenUri: https://example.com/oauth/token
authorizationGrants:
- в параметре type указывается, что в API используется авторизация по протоколу OAuth2;
- далее указывается, что авторизационные данные можно передавать либо в заголовке Authorization, либо в query-параметре access_token;
- после этого следуют возможные коды ответов и их описания;
- в конце раздела, в секции settings указываются URL для авторизации, URL для получения токена, а также необходимые для аутентификации параметры (authorization grants).
#%RAML 0.8
title: Example API
version: 1
baseUri: https://api.example.com/{version}
securedBy:
securitySchemes:
- oauth_2_0: !include oauth_2_0.yml
Объекты и методы
/document
get:
put:
post:
/{documentId}
get:
delete:
/documents
get
headers:
X-Auth-Token:
required: true
/document
/{documentId}
uriParameters:
id:
description: document identification number
type: string
pattern: ^{2}\-{3}\-\d{2}\-\d{5}$
/documents
get:
description: Retrieve a list of documents
post:
description: Add a new document
body:
application/x-www-form-urlencoded
formParameters:
id:
description: document identification number
type: string
pattern: {2}\-{3}\-\d{2}\-\d{5}$
name:
description: the name of the document
type: string
required: true
author:
description: The name of the author
type: string
required: true
/documents
get
Query-параметры
/document:
get:
queryParameters:
author:
displayName: Author
type: string
description: The author's full name
example: Ivan Petrov
required: false
name:
displayName: Document Name
type: string
description: The name of the document
example: Delivery contract
required: false
signingDate:
displayName: signingDate
type: date
description: The date when the document was signed
example: 2015-07-15
required: false
Профили
#% RAML 0.8
title: Example API
baseUri: http://api.example.com/{version}
version: v1
traits:
- searchable:
queryParameters:
author:
displayName: Author
type: string
description: The author's full name
example: Ivan Petrov
required: false
name:
displayName: Document Name
type: string
description: The name of the document
example: Delivery contract
required: false
signingDate:
displayName: signingDate
type: date
description: The date when the document was signed
example: 2015-07-15
required: false
/document:
get:
is:
Описание ответа
/documents:
/{documentId}:
get:
description: Retrieve document information
responses:
200:
body:
application/json:
schema |
{"$schema": “http://json-schema.org/schema”,
"type":"object"
"description": "a document"
"properties": {
"id":{"type":"string"}
"name":{"type":"string"}
"author":{"type":"string"}
"signingDate": {"type":"date"}
example: |
{"data:" {
"id": "DOC3456"
"name": "New Delivery Contract"
"author": "Ivan Petrov"
"signingDate": "2015-05-20"
},
"success": true
"status": 200
}
schemas:
- !include document-schema.yaml
/articles:
get:
responses:
200:
body:
application/json:
schema: document
Микросервисы со Spring Boot. Часть 5. Использование сервера имен Eureka
- Перевод
- Tutorial
В этой заключительной части нашей серии архитектур микросервисов мы научимся включать сервер имен Eureka и позволять микросервисам взаимодействовать с ним.
Это статья входит в серию статей «Микросервисы со Spring Boot»:
- Часть 1. Начало работы с архитектурой микросервисов
- Часть 2. Создание микросервиса Forex
- Часть 3. Создание микросервиса конвертации валют
- Часть 4. Использование Ribbon для балансировки нагрузки
- Часть 5. Использование сервера имен Eureka
В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью Spring Boot и Spring Cloud.
Это руководство поможет вам изучить основы микросервисных архитектур. Мы также начнем рассматривать базовую реализацию микросервиса со Spring Boot.
Кто разрабатывает API-платформы и как они работают
Согласно вышеупомянутому «волшебному квадранту» агентства Gartner, лидерами на рынке систем управления полным жизненным циклом API являются компании Google, CA Technologies, IBM, Software AG, MuleSoft, Red Hat и TIBCO Software. Агентство Forrester в своем недавнем исследовании называет лидерами компании IBM, Google, Software AG, Rogue Wave Software и WSO2.
Согласно отчету Forrester: «API являются ключевой основой для цифровой трансформации. Они способствуют оптимизации клиентского опыта, создают интегрированные цифровые экосистемы клиентов и партнеров, позволяют компаниям извлекать выгоду из прорывных цифровых инноваций, повышать операционную эффективность и закладывают основу для платформенных бизнес-моделей… Решения для управления API играют центральную роль в управлении отношениями между поставщиками и пользователями API, разработчики и поставщики приложений должны рассматривать их как бизнес-приложения, исключительно важные для успеха цифрового бизнеса».
Интерфейс администрирования API
«Не обеспечив полноценного управления жизненным циклом API, нельзя создать платформу для цифровой стратегии, построить экосистему и запустить эффективные продукты», — добавляет в своем отчете Gartner.
Мы в компании Software AG занимались управлением API, когда это еще называлось «внутренним взаимодействием». Мы расширяли и совершенствовали связующее программное обеспечение, решения для интеграции приложений, системы для создания сервисной шины предприятия и инструментарий для создания систем, основанных на сервисно-ориентированной архитектуре.
В 2004 г. в дополнение к нашей интеграционной шине мы создали продукт B2B Trading Networks, предназначенный для межпартнерского взаимодействия и обмена данными. В нем были реализованы вполне классические пользовательские сценарии межпартнерского взаимодействия, включая постоянный мониторинг, сервис, обмен данными по итогам операционного дня. Тогда это еще не называлось открытыми API.
Наконец, пять лет назад мы представили полный жизненный цикл управления API в рамках платформы управления API webMethods. В 2014 г. мы запустили webMethods API Portal для разработчиков API, а в 2016 г. объединили функционал API-шлюз webMethods API Gateway, портала и средств медиации и управления жизненным циклом в одну платформу. Эти средства поддерживают разработку API, их сборку, одобрение и публикацию в принятом технологическом стандарте и являются частью платформы Software AG Hybrid Integration & API.
Выбор спецификации API
Инструкция по подбору партнера
Чтобы эффективно пользоваться всем функционалом сайта знакомств, необходимо знать ряд правил, помогающих пользователю. Мы работаем в индустрии уже десять лет, поэтому знаем все тонкости правильного поиска. Делимся знаниями:
Интерактивное голосовое редактирование текста с помощью новых речевых технологий от Яндекса
Сегодня наше приложение Диктовка для интерактивного написания и редактирования текста голосом появилось в AppStore и Google Play. Его главная задача — продемонстрировать часть новых возможностей комплекса речевых технологий Яндекса. Именно о том, чем интересны и уникальны наши технологии распознавания и синтеза речи, я хочу рассказать в этом посте.
Пара слов, чтобы вы понимали, о чём пойдёт речь. Яндекс уже давно предоставляет бесплатное мобильное API, которое можно использовать, например, для распознавания адресов и голосовых запросов к поиску. За этот год мы смогли довести его качество почти до того же уровня, на котором такие запросы и реплики понимают сами люди. И теперь мы делаем следующий шаг — модель для распознавания свободной речи на любую тему.
Кроме этого, наш синтез речи поддерживает эмоции в голосе. И, насколько нам известно, это пока первый коммерчески доступный синтез речи с такой возможностью.
Обо всём этом, а также о некоторых других возможностях SpeechKit: об активации голосом, автоматической расстановке пунктуационных знаков и распознавании смысловых объектов в тексте — читайте ниже.
Индикатор раскладки клавиатуры цветом панели задач и заголовка окна в современных версиях Windows при помощи DWM
Из песочницы
Индикатор раскладки клавиатуры в Windows — довольно незаметная штука. Набранные на автомате не в той раскладке буквы всегда расстраивают. По крайней мере, меня. Поэтому мне всегда хотелось иметь настолько заметный индикатор текущей раскладки клавиатуры, насколько это вообще возможно. Ну хотя бы такой, с которым не нужно бегать взглядом по экрану.
Идеальным вариантом было бы пристроить небольшой индикатор прямо рядом с курсором в поле ввода, но это оказалось сложной задачей: некоторые приложения вообще не используют системный курсор. Простым и достаточно удобным решением проблемы оказалась смена цвета панели задач и заголовка окна во всей системе. Как оказалось, это можно делать программно при помощи недокументированных возможностей Desktop Window Manager API…
Почему самоуничтожающиеся фотографии/видео в Telegram не безопасны
Из песочницы
Совсем недавно я увидел статью, где говорилось о внедрении самоуничтожающихся сообщений в мессенджере WhatsApp. Она будет иметь схожую с Telegram функциональность, но если в мессенджере Дурова удаление распространяется как на обычные сообщения (секретные чаты), также их можно использовать на фотках в обычных чатах. То есть после отправки предположим фотографии, собеседник сможет просмотреть ее ограниченное количество времени, а после, по идее, она будет удалена у обоих собеседников (желательно с сервера тоже), то в WhatsApp планируется внедрение удаления обычных сообщений(и сделано пока оно так себе).
Но, сегодня речь пойдет не о WhatsApp (ибо я им вообще не пользуюсь), а о Telegram. Сама идея самоуничтожающихся сообщений вряд ли пользуется большим спросом, но и есть те пользователи, которые пользуются ими, например, при отправке документов или же фотографий, которые можно увидеть лишь раз (кхм).
Для тех, кто ленится читать – самоуничтожающиеся сообщения в Telegram не безопасны и не конфиденциальны. Не думайте, что если вы таким способом отправите какому-нибудь собеседнику важный документ, он его не сможет сохранить (и я сейчас не про способ быстрого скриншота или же фотографий экранов телефона, боже упаси) – для этого используйте секретные чаты. А для тех кому интересна сама реализация этих сообщений, можете продолжить чтение.
FutoIn AsyncSteps: концепция и реализация асинхронной бизнес-логики
Из песочницы
В этой статье хочу познакомить уважаемых читателей с ещё одним велосипедом подходом к организации асинхронного кода. Сразу оговорюсь, что существует масса решений от лёгких потоков и разных предложений по Promise до самопала под специфические задачи, но я не берусь приводить какие-либо субъективные сравнения, поскольку ни одно из них меня не устроило не только с точки зрения программиста, но и проверяющего код.FutoIn — с одной стороны, это «клей» из стандартов/спецификаций разных мастей для унификации программных интерфейсов различных существующих проектов по устоявшимся типам, с другой — это концепция для построения и масштабирования компонентов проекта и инфраструктуры, написанных на разных технологиях, без потребности в добавления этого самого «клея».AsyncSteps — это спецификация и реализация программного интерфейса для построения асинхронных программ в независимости от выбранного языка или технологии.Цели, поставленные для концепции:
- реализация (с оговорками) должна быть возможна на всех распространённых языках программирования с поддержкой объектов и анонимных функций. Репрезентативный минимум: С++, C#, Java, JavaScript, Lua (не ООП), PHP, Python;
- написанная программа должна легко читаться (сравнимо с классическим вариантом);
- должны поддерживаться исключения языка (Exceptions) с возможностью перехвата и разворачиванием асинхронного стека до самого начала;
- требуется удобство для написания асинхронных библиотек с единым подходом для вызова, возврата результата и обработки ошибок;
- предоставить простой инструмент для естественного распараллеливания независимых веток программы;
- предоставить простой инструмент создания асинхронных циклов с классическим управлением (break, continue) и меткой для выхода из вложенных циклов;
- предоставить место для хранения состояния исполняемой бизнес-логики;
- возможность отменять абстрактную асинхронную задачу, правильно завершая выполнение (освобождая внешние ресурсы);
- возможность легко интегрироваться с другими подходами асинхронного программирования;
- возможность ограничивать время выполнения задачи и отдельно каждой подзадачи;
- возможность создавать модель задачи для копирования (улучшения производительности критичных частей) или использования как объект первого класса для передачи логики в качестве параметра (а-ля callback);
- сделать отладку асинхронной программы максимально комфортной.
Проектирование RESTful API с помощью Python и Flask
- Перевод
- Tutorial
В последние годы REST (REpresentational State Transfer) стала стандартной архитектурой при дизайне веб-сервисов и веб-API.
В этой статье я покажу вам как просто создавать RESTful веб-сервисы используя Python и микрофреймворк Flask.
Что такое REST?
Характеристика системы REST определяется шестью правилами дизайна:
- Клиент-Сервер: Должно быть разделение между сервером, который предлагает сервис и клиентом, который использует ее.
- Stateless: Каждый запрос от клиента должен содержать всю информацию, необходимую серверу для выполнения запроса. Другими словами, сервер не обязан сохранять информацию о состоянии клиента.
- Кэширование: В каждом запросе клиента должно явно содержаться указание о возможности кэширования ответа и получения ответа из существующего кэша.
- Уровневая система: Клиент может взаимодействовать не напрямую с сервером, а с произвольным количеством промежуточных узлов. При этом клиент может не знать о существовании промежуточных узлов, за исключением случаев передачи конфиденциальной информации.
- Унификация: Унифицированный программный интерфейс сервера.
- Код по запросу: Сервера могут поставлять исполняемый код или скрипты для выполнения их на стороне клиентов.
В VK добавили Callback кнопки для ботов
Tutorial
Доброго времени суток, уважаемые жители Хабра.
Мой первый пост. Будет кратко, емко и надеюсь актуально.
9го июля ВК выкатил callback кнопки для чат-ботов. Телеграм напрягся сделал это в 199… давно. Самая популярная библиотека для разработки чат-ботов под ВК на Python — vk_api (от разработчика python273). Ввиду того, что свежие правки в нее вносятся медленно, я взял на себя смелость сделать форк, дополнить его и описать небольшой пример использования.
Что сделано относительно исходной v11.80?
-
Обновлены ограничения по клавиатуре (в соответствии с изменениями в API):
- не более 5 кнопок в строке (было 4);
- не более 10 и 6 строк для стандартного и inline представления соответственно (было 10 и там, и там);
- Default кнопка переименована в Secondary.
-
Добавлены callback-кнопки:
- новый тип события «message_event» (клик по кнопке);
- новый метод «создать callback кнопку»;
- добавлен example (анимация работы и код будут приведены ниже).
Виды callback кнопок
У сallback кнопок 3 встроенных действия по клику (+ редактирование сообщения):
- show_snackbar — показать всплывающее сообщение (исчезает через 10 сек);
- open_link — открыть URL ссылку;
- open_app — открыть ВК приложение;
- можно настроить редактирование текущего сообщения, дабы по клику можно было изменять клавиатуру + текст в текущем сообщении.
Что такое XML
Если вы тестируете API, то должны знать про два основных формата передачи данных:
- XML — используется в SOAP (всегда) и REST-запросах (реже);
- JSON — используется в REST-запросах.
Сегодня я расскажу вам про XML. XML, в переводе с англ eXtensible Markup Language — расширяемый язык разметки. Используется для хранения и передачи данных. Так что увидеть его можно не только в API, но и в коде.
Этот формат рекомендован Консорциумом Всемирной паутины (W3C), поэтому он часто используется для передачи данных по API. В SOAP API это вообще единственно возможный формат входных и выходных данных!
Так что давайте разберемся, как он выглядит, как его читать, и как ломать! Да-да, а куда же без этого? Надо ведь выяснить, как отреагирует система на кривой формат присланных данных.
Под капотом бота-клиента Яндекс.Музыки
Введение
Привет, Хабр! Вновь я с уже второй статьей, затрагивающей API Яндекс.Музыки. Дело запланированное и упоминалось в первой статье.
Руки дошли, дело сделано. Сегодня я расскажу об интересных, на мой взгляд, моментах, которые присутствуют в кодовой базе моего Telegram бота, позиционирующего себя как полноценный клиент я.музыки. Ещё мы затронем API для распознавания музыки от Яндекс.
Перед тем, как приступить к попунктному рассказу реализации той или иной вещи, стоило бы иметь представление о самом боте и его функциональных возможностях.
В основной части я расскажу про следующее:
- Авторизация в аккаунт через сайт на GitHub Pages (зачем и почему).
- Формат данных, его упаковка и использование в данных для кнопок.
- Роутинг апдейтов, версионность данных, прокидывание контекста в обработчики.
- Сервисы:
- Сервис перезаливки трека в Telegram.
- Сервис «подписок» на получение трека с отправкой статуса о загрузке.
- Наипростейшая и элегантная реализация кэширования запросов.
- Распознавание трека по голосовому сообщению и как это вообще появилось в боте.
- Мелкие заметки.
Если Вас заинтересовал хоть один пункт — добро пожаловать под кат.
Удаляем статью
частая ошибка — пустой body
MIME-типы
- По умолчанию это text/plain — просто текст.
- Если ничего не указано, то браузер, скорее всего, будет иметь в виду application/octet-stream — просто поток бит.
- application/pdf;
- image/png;
- application/json;
- application/xml;
- application/vnd.ms-excel.
Коды ответов
тошибки 200 ОК
- 201 Created — успешный код. Статья создана, в ответ надо вернуть созданную статью.
- 202 Accepted означает, что запрос был принят, но его результат будет позже. Это долгоиграющие операции. На Accepted можно не возвращать никакого body. То есть если вы Content-Type в ответе не отдаете, то и body тоже может не быть. Или Content-Type text/plane — все, никаких вопросов. Пустая строка — это валидный text/plane.
- 204 No Content — тело может вообще отсутствовать.
- 403 Forbidden — вам нельзя создавать эту статью.
- 404 Not Found — вы залезли куда-то не туда, нет такого пути, например.
- 409 Conflict — крайний случай, который мало кто использует. Он бывает нужен, если вы на клиенте, а не на бэкенде генерируете id, а в это время кто-то уже успел создать эту статью. Конфликт — это правильный ответ в таком случае.
Создание сущности
- 422 Unprocessable Entity — необрабатываемая сущность. Вроде бы все здорово — семантика, есть код;
- 403 Forbidden;
- 500 Internal Server Error.
API операционных систем. Проблемы, связанные с многообразием API
Практически все операционные системы (Unix, Windows, MacOS, и т. д.) имеют API, с помощью которого программисты могут создавать приложения для этой операционной системы.
Главный API операционных систем — это множество системных вызовов.
В индустрии программного обеспечения общие стандартные API для стандартной функциональности имеют важную роль, так как они гарантируют, что все программы, использующие общий API, будут работать одинаково хорошо или, по крайне мере, типичным привычным образом. В случае API графических интерфейсов это означает, что программы будут иметь похожий пользовательский интерфейс, что облегчает процесс освоения новых программных продуктов.
С другой стороны, отличия в API различных операционных систем существенно затрудняют перенос приложений между платформами. Существуют различные методы обхода этой сложности — написание «промежуточных» API (API графических интерфейсов Qt, Gtk, и т. п.), написание библиотек, которые отображают системные вызовы одной ОС в системные вызовы другой ОС (такие среды исполнения, как Wine, cygwin, и т. п.), введение стандартов кодирования в языках программирования (например, стандартная библиотека [[Си языка C), написания интерпретируемых языков, реализуемых на разных платформах (sh, perl, php, tcl, Java, и т. д.)
Также необходимо отметить, что в распоряжении программиста часто находится несколько различных API, позволяющих добиться одного и того же результата. При этом каждый API обычно реализован с использованием API программных компонент более низкого уровня абстракции.
Например: для того, чтобы увидеть в браузере строчку «Hello, world!» достаточно лишь создать HTML-документ с минимальным заголовком, и простейшим телом, содержащим данную строку. Что произойдёт, когда браузер откроет этот документ? Программа-браузер передаст имя файла (или уже открытый дескриптор файла) библиотеке, обрабатывающей HTML-документы, та, в свою очередь, при помощи API операционной системы прочитает этот файл, и разберётся в его устройстве, повызывает через API библиотеки стандартных графических примитивов операции типа «очистить окошко», «написать выбранным шрифтом Hello, world!», при этих операциях библиотека графических примитивов обратится к библиотеке оконного интерфейса с соответствующими запросами, уже эта библиотека обратится к API операционной системы с запросами вида «а положи-ка мне в буфер видеокарты вот это».
При этом практически на каждом из уровней реально существует несколько возможных альтернативных API. Например: мы могли бы писать исходный документ не на HTML, а на LaTeX, для отображения могли бы использовать любой браузер. Различные браузеры, вообще говоря, используют различные HTML-библиотеки, и, кроме того, всё это может быть (вообще говоря) собрано с использованием различных библиотек примитивов и на различных операционных системах.
Основными сложностями существующих многоуровневых систем API, таким образом, являются:
- Сложность портирования программного кода с одной системы API на другую (например, при смене ОС);
- Потеря функциональности при переходе с более низкого уровня на более высокий. Грубо говоря, каждый «слой» API создаётся для облегчения выполнения некоторого стандартного набора операций. Но при этом реально затрудняется, либо становится принципиально невозможным выполнение некоторых других операций, которые предоставляет более низкий уровень API.
CRUD операции с Entities в DialogFlow (C#)
Recovery Mode
Вступление
Совсем недавно я начал работу над новым проектом, который включал в себя работу с уже достаточно известным сервисом (AI) от Google — DialogFlow. Суть заключалась в том, что у нас был бот (Telegram) который работал с API нескольких сайтов, а сам же DialogFlow помогал нам структурировать само общение с человеком, для чего он в принципе и создавался. Нужно сказать, что статья предназначена для людей, которые только начали знакомство с сервисом или уже имеют небольшой опыт, так далее возможны термины: Intent, Context, Action, Event ну и то ради чего мы и собрались — Entities. Надеюсь, что статья будет полезна тем, кто немного не понял как именно через код можно проделывать CRUD операции с Entities.
Entities в DialogFlow
В DialogFlow Entities представляют собой некие сущности, которые состоят из ReferenceValue и Synonyms. Что-то похожее на ключ-значение, только с той разницей, что синонимов может быть много, и чем их больше — тем лучше, поскольку это «упрощает боту жизнь» и ему легче понять о каком значении идет сейчас речь, а поставленная галочка на Fuzzy matching поможет боту еще и понимать о чём идет речь, даже если вы упустили одну букву или другой символ. Выглядит это примерно так:
Москва — москва, Москва, Мсква…
Заканчивая короткий экскурс, хотел бы добавить, что именно с Entity происходит очень много всякой возни. Я конечно же не уменьшаю значение интентов и так далее, но факт остается фактом.
Как на архаичном рынке факторинга перевести все сделки в онлайн? Опыт «Сбербанк Факторинга»
Для большинства людей факторинг – услуга непонятная. По факту — это финансирование поставок компаний, работающих с отсрочкой платежа.
Предположим, вы небольшой производитель круп. Вы отгрузили товар в торговую сеть, но деньги получите в среднем через 60 дней после отгрузки. Многим компаниям ждать столько не под силу: ту же зарплату сотрудникам нужно платить уже сейчас. Одно из решений — факторинг. После заключения договора факторинга вы можете получить финансирование любой поставки. Достаточно после отгрузки товара отправить фактору подтверждающие документы (счета-фактуры, накладные, акты). Фактор верифицирует поставку у вашего покупателя и перечисляет вам деньги за товар, за вычетом собственной комиссии.




