Обновить
41.81

Проектирование API *

О создании API

Сначала показывать
Порог рейтинга
Уровень сложности

Как могла бы выглядеть поддержка JSON в современном С++

Время на прочтение5 мин
Охват и читатели71K
Хорошо в плане поддержки JSON живётся программистам на Javascript — по какому-то невероятному стечению обстоятельств там JSON входит в спецификацию самого языка: есть JSON — есть объект. Удобно. Неплохо дело обстоит и в языках, где JSON не входит в сам язык, но поддерживается стандартной библиотекой (Python, Ruby): импортируешь модуль — и готово.

Жизнь программистов на С++ никогда не была особо простой — поддержки JSON у нас нет ни на уровне языка, ни в стандартной библиотеке. И не будет, возможно, никогда. «Тоже мне проблему нашел!» — скажут мне опытные коллеги — «Её там и не должно быть, С++ поставляется без „батареек“. Для решения этой задачи мы...» и вот здесь они разделятся на два лагеря:

1. «Мы используем большой фреймворк (boost, Qt, POCO, другой), который применяется во всех наших проектах и умеет 150 000 разных вещей, в том числе и JSON.»
2. «Мы придерживаемся подхода в котором для каждой задачи применяется своя легковесная библиотека. В частности, для JSON мы уже 150 000 лет назад выбрали отличную библиотеку %JSON_LIB%, которая прекрасно работает.»

Да, всё так и есть. Вот только…

Чем плох подход с использованием фреймворков
Во-первых, тянуть в проект огромный фреймворк ради одного JSON — как-то уныло. Ну ладно, допустим фреймворк у вас был и так. Но тогда придётся писать работу с JSON в терминах фреймворка, а это, как правило, тихий ужас. Посмотрите, например, на документацию по JSON в Qt — куча собственных типов вроде QJsonArray, QJsonDocument, QJsonObject, QJsonValue и т.д. и их придётся использовать. О том, чтобы потом перенести код в другой проект (где этого фреймворка нет) можно сразу забыть. Ну или вот Boost: парсер JSON находится очень логично в модуле Boost.PropertyTree. Ага, так бы я и догадался. Т.е. нам предлагают плясать не от формата JSON, а от структуры данных «дерево», которая умеет себя читать в том числе и из JSON.

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


Чем плох подход с использованием библиотек
Плох он вот этой частью: "...150 000 лет назад выбрали отличную библиотеку...". Скорее всего речь идёт о чём-то, что начинало писаться чуть-ли не во времена DOSа и, без сомнения, работает, но при этом, пытаясь быть совместимым со всеми платформами и стандартами языка совершенно отстаёт от прогресса. Да, всё компилируется и работает, даже тесты проходит. Но библиотека совершенно не знакома с такими вещами, как ключевое слово auto, range-based циклы, строковые литералы, raw-строки, конструкторы перемещения, списки инициализации и прочие классные вещи, делающие код одновременно более эффективным и более легко читаемым. А ведь у библиотеки, созданной годы назад, есть обязательства по обратной совместимости, а значит просто так взять и добавить это всё она не может.


Давайте немного помечтаем.

А что, если бы JSON вошел в стандартную библиотеку нового стандарта С++? Что, если бы он был написан в терминах С++11\14 и без требований обратной совместимости со старыми стандартами языка? Что, если бы синтаксис этого модуля попытались бы сделать максимально приближенным к родному для JSON использованию «а-ля Javascript», но в том же время сохранить дух С++ (эффективность, минимальное потребление памяти, совместимость с STL)? Что, если бы его можно было включить в проект одним инклюдом и не беспокоиться о его сборке и линковке? Как бы это всё выглядело и работало?

И у нас есть ответ на этот вопрос! Давайте посмотрим на JSON-библиотеку для С++ написанную в соответствии со всеми этими принципами, ну и вообще написанной людьми для людей, а не чужими для хищников, как это обычно бывает.
Читать дальше →

Автоматизация торговли акциями на ММВБ на примере терминала от Альфа Банка

Время на прочтение8 мин
Охват и читатели37K
В свободное от работы время занимаюсь созданием торговых роботов. Тема финансовых рынков и автоматизации торгов меня интересует давно, и сегодня я рад поделиться примером создания простого робота на примере известного биржевого терминала от Альфа Банка.

Предыстория


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

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

zabbix_sender over HTTP — как послать данные в Zabbix по HTTP|S

Время на прочтение5 мин
Охват и читатели28K
В этой статье я приведу возможное решение проблемы для многих системных администраторов, которые используют систему мониторинга Zabbix. Особенно пригодится для тех, кто осуществляет мониторинг разных программ в Zabbix: системы телефонии, разные регламентные операции с БД, 1С (да, да, такие вот мы извращенцы люди с нестандартным мышлением, что мониторим 1С в Zabbix). Сам мучался делая Powershell-скрипты, использую для отсылки zabbix_sender.exe. Страшные были времена.
Читать дальше →

Crowdin: обезболивающее при локализации

Время на прочтение4 мин
Охват и читатели18K
О локализации без боли мечтает каждый, кто знает, что такое локализация. Особенно мечтает тот, кому нужно перевести свой продукт сразу на десяток языков. И тот, у кого в текстах сплошные термины. И еще сильнее тот, у кого постоянно выпускаются обновления с новыми строками, которые с тем же постоянством надо переводить, переводить, переводить…


Кадр из фильма Леонида Гайдая «Кавказская пленница, или Новые приключения Шурика»

С этими и другими сложностями мы в Alconost справляемся благодаря одному-единственному инструменту, который решает сразу десяток проблем. Медики назвали бы такую штуку панацеей. А мы, локализаторы, зовем ее облачной платформой Crowdin. Именно Crowdin позволил нам делать локализации приложений, сайтов и игр на 40 с лишним языков для десятков разных клиентов одновременно.

Итак, мы выделили шесть основных сложностей локализации, от которых избавляет Crowdin:
Читать дальше →

Районы… Кварталы…

Время на прочтение3 мин
Охват и читатели38K
Совсем недавно на хабре была статья от AirBnb — «Создавая карту мира». Хорошая и красивая статья про административное деление мира. Один минус — у статьи один комментарий, и то мой.
Пользуясь случаем проведу опрос — хотели ли бы вы такую карту административных делений?
А то она у меня есть:



Вы наверное замечали, что Google.Карты умеют подсвечивать контура городов. С недавнего времени такое есть и на Яндекс.Картах. Мало кто знает, что геометрия есть и на eSosedi.

А вот когда такая возможность появится на вашем сайте — теперь зависит только от тебя %username%.

Для достижения эффекта достаточно зайти на data.esosedi.org или GitHub, ознакомиться с документацией библиотеки osmeRegions и начать использовать.

P.S.: 3 признака того, что год минувший все сделал красиво: 1. Районы 2. Кварталы. 3. Детализация до «Жилые массивы» доступна для некоторых городов.
Читать дальше →

Знакомство с API what3words: основные процедуры и сэмплы

Время на прочтение5 мин
Охват и читатели3.9K


Нашей главной задачей было дать адреса каждому месту на планете, и сегодня эта задача выполнена. Сетка квадратов what3words покрывает весь земной шар, и у каждого квадрата есть уникальный адрес. Самое время дать возможность каждому использовать адреса из трех слов, и сделать это удобным. Удобно будет, когда каждая карта, навигационное приложение и другие геолокационные сервисы будут поддерживать what3words. Для этого и был создан наш API, о котором мы хотим рассказать подробно.
Читать дальше →

Справочник методов console в JS

Время на прочтение6 мин
Охват и читатели36K
Со времён систематизации методов объекта console прошло достаточно много времени, некоторые браузеры получили поддержку недостающих ранее методов. Таблица вызывает естественный интерес у разработчиков, поэтому — почему бы её не обновить, дополнив в одной статье описаниями? Github.
Читать дальше →

Туториал по Coub API

Время на прочтение10 мин
Охват и читатели24K
На днях мы выпустили Coub API. Теперь можно делать приложения, смотреть ленту, лайкать, рекобить, то есть практически все, что можно сделать на сайте, можно делать через API. Но самое главное — теперь можно из сторонних приложений через API создавать кобы.

В этом туториале я покажу, как можно сделать простейший клиент коба на Ruby on Rails. Приложение позволяет залогиниться через коб и сгенерить такой коб с любым текстом:



Рабочая версия этого приложения лежит по адресу fantozzi.dev2.workisfun.ru, код приложения из этого туториала можно посмотреть на Гитхабе: github.com/igorgladkoborodov/memegenerator
Подробности

DaData.ru подсказывает email и определяет город по IP

Время на прочтение1 мин
Охват и читатели15K
DaData.ru — сервис автоматической проверки и исправления контактных данных (ФИО, адресов, телефонов, email). Плюс javascript-виджет и API подсказок при вводе адреса, ФИО и организации.

С предыдущего выпуска Дадата научилась:
  • подсказывать email при вводе,
  • определять город по IP-адресу,
  • распознавать модели автомобилей.

Фичи доступны через пользовательский интерфейс и HTTP API.
Интересно, что там у вас

3 лучших инструмента для описания RESTful API

Время на прочтение3 мин
Охват и читатели127K

Взаимодействие различных сервисов с использованием АPI, из новаторства превращается в обыденность. Количество бесплатных и платных API уже исчисляется тысячами, и с каждым днем их число активно растет. А почему бы и нет? Продажа удаленных запросов к своему новаторскому сервису может принести больше прибыли, чем распространение услуг через свою площадку. И пусть, в таком случае, уже ваши клиенты ломают голову и тратят деньги на привлечение аудитории. Используя свой опыт работы, я предлагаю краткий обзор лучших решений по реализации API на сегодняшний день.
Читать дальше →

OpenCage — самый мощный инструмент для геокодирования

Время на прочтение2 мин
Охват и читатели13K


Большинство людей не задумываются о геокодировании, когда дают своему смартфону запрос в виде адреса, GPS-координат, широты и долготы, или координат what3words. Разработчики в свою очередь должны понимать всю критическую важность геокодера. Каждый из предложенных геокодеров имеет свои плюсы и минусы, которые нужно учитывать при выборе. Некоторые геокодеры могут иметь неприемлемые ограничения, стоимость, или быть недоступными для коммерческих целей. Некоторые сервисы не поддерживают кэширование, и практически все они имеют 24-часовые лимиты. Универсального варианта не существовало до появления OpenCage.
Читать дальше →

Именование сложных действий в REST API

Время на прочтение3 мин
Охват и читатели69K
Во всех руководствах в описаниях REST дают простые примеры, типа вот вам пользователи, они будут ресурсом /users, вот вам один пользователь, он будет /users/[id] и действия с ним добавить\удалить\изменить.

А что если действия сложные или комплексные и не вписываются в GET\POST\DELETE?

Читать дальше →

API в реальной жизни: Как облегчить задачу создания сайтов для поиска и покупки автозапчастей

Время на прочтение6 мин
Охват и читатели38K
image

В ходе работы над платформой для создания интернет-магазинов автозапчастей abcp.ru мы столкнулись с необходимостью разработки API.

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

Наших ресурсов на одновременное ведение нескольких таких проектов могло не хватить. Поэтому мы создали API для внешних разработчиков, которых клиенты могли бы привлекать для работы над своими сайтами. Сегодня мы подробнее расскажем о том, что у нас в итоге получилось.
Читать дальше →

Ближайшие события

How-to: Как API улучшает инфраструктуру хостинг-провайдера

Время на прочтение3 мин
Охват и читатели6.5K
image

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

Для решения этих задач мы разработали API — о том, как работает этот интерфейс, и какие задачи с его помощью можно решать наш сегодняшний топик.
Читать дальше →

Как обойти основные затруднения при портировании САПР приложений на nanoCAD?

Время на прочтение3 мин
Охват и читатели5.6K


В конце октября 2014 года в Москве прошла 10-я юбилейная конференция «Разработка ПО, CEE-SECR-2014», на которой был представлен наш доклад о создании кросс-САПР-платформенных приложений. Доклад состоял из исторического обзора, рассказа об опыте портирования САПР приложений на nanoCAD и анализа основных затруднений при портировании. В настоящей статье мы не будем останавливаться на первых двух частях доклада — запись опубликована в конце статьи, а более подробно рассмотрим третью часть, доработанную по результатам обсуждения доклада в кулуарах конференции.

Когда в 2008 году мы начали разрабатывать nanoCAD, у нас уже существовало более двух десятков приложений для AutoCAD. Работы по портированию приложений велись параллельно с разработкой новой САПР платформы, требования приложений в значительной степени определяли направление разработки. В результате портирования приложения стали кросс-САПР-платформенными, заработали в nanoCAD и не потеряли возможность работы в AutoCAD.

В процессе портирования собственных приложений, а также в процессе общения с разработчиками сторонних приложений в рамках Клуба разработчиков nanoCAD, мы обнаружили несколько повторяющихся шаблонов, мешающих эффективному портированию:
Читать дальше →

Тренды 2015 года: 5 способов поставить API на службу бизнесу

Время на прочтение3 мин
Охват и читатели8.3K
image

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

Интерфейсы программирования приложений (Application programming interfaces, APIs) уже давно стали одним из инструментов разработчиков, помогающих создавать и связывать приложения. Скоро веб API или интерфейсы сервисов, вызов которых происходит по Сети, станут частью любого нового сценария работы с ИТ: от Интернета вещей до аналитики, интеграции сервисов или фиксации состояния пользователя. Роберто Медрано из SOA Software поделился своими соображениями о том, чем в этом году нам смогут помочь веб API, и оказалось, что с их помощью можно будет решать практически любые задачи.
Читать дальше →

Разработка микросервисов с использованием Scala, Spray, MongoDB, Docker и Ansible

Время на прочтение7 мин
Охват и читатели32K
Цель данной статьи — показать возможный подход для построения микросервисов с использованием Scala, RESTful JSON, Spray и Akka. В качестве базы данных мы будем использовать MongoDB. В результате нашей работы мы упакуем наш проект в Docker-контейнер, а Vagrant и Ansible позволит нам управлять конфигурацией приложения.

В этой статье вы не найдете подробностей о языке Scala и других технологиях, которые будут использоваться в проекте. В ней вы не найдете руководства, которое ответит на все ваши вопросы. Цель статьи — показать технику, которую можно использовать при разработке микросервисов. На самом деле, большая часть этой статьи не завязана на конкретной технологии. Docker имеет более широкую сферу использования, нежели только микросервисы. Ansible позволяют быстро развернуть любое требуемое окружение, а Vagrant — отличный инструмент для создания виртуальных машин.
Читать дальше →

Flickr API в Android App. Авторизация

Время на прочтение6 мин
Охват и читатели9K
Привет, хабралюди!

Хочу поделиться с вами небольшим опытом использования Flickr API в Android приложениях и рассказать об авторизации пользователя Flickr. Которую в дальнейшем можно будет использовать например для вывода списка альбомов и изображений.
Читать дальше →

Приглашаем познакомиться с нашей новой страницей для разработчиков

Время на прочтение1 мин
Охват и читатели3.7K
В начале этого года мы запустили совершенно новую версию сайта what3words.com. Мы внесли массу изменений, а также создали несколько дополнительных страниц, одна из которых предназначена для разработчиков и наших будущих партнеров. Мы рады представить вам developer.what3words.com!


Читать дальше →

Попытка реинкарнации и вброс в Open-Source Яндекс.Подписок

Время на прочтение2 мин
Охват и читатели12K
Привет, хабрасообщество! Многие заметили, что Яндекс закрыл сервис подписок. Читая комментарии, у меня возникла идея создать аналог. Поднять его на API от Яндекса, после чего перевести его, так сказать, на автономное питание, заменив API на свое (не переживайте, я не сделаю это так незаметно, как сделал это Великий Желтый).

Был создан репозиторий на гитхабе, зарегистрирован временный домен в зоне .tk (почему временный, я думаю, объяснять не стоит. Кому интересен сей проект, милости прошу под кат.
Читать дальше →

Вклад авторов