Обновить
28.22

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

О создании API

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

UPD. Тестирование REST API на Golang. 120 000 [#/sec] не предел?

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

На глаза попалась не особо позитивное сравнение Java vs GO. Тестирование большим числом пользователей.


Решил проверить, действительно ли так все не радужно с Go.
Забегая вперед скажу, что при кэшировании в памяти и формировании JSON "на лету" удалось получить до 120 000 [#/sec] на 8 физических ядра.


Базовый сценарий GET запроса:


  • Если данные найдены в in memory кэше и они валидные, то формируем JSON из структуры
  • Если данных в кэше нет, то ищем их в Bolt DB, если находим, то считываем готовый JSON
  • Если данных нет в Bolt DB, то запрашиваем их из БД, сохраняем их в in memory кэше
  • Данные в in memory кэше накапливаются в буферном канале, после накопления около 10000 элементов они сбрасываются единым save в Bolt DB
  • Если данные в БД менялись (update / insert) то через pg_notify передается уведомление и данные в кэше помечаются как невалидные, при следующем обращении они считываются заново из БД

Под катом результаты тестирования, и код тестового стенда GitHub


Update 06.05.2020


Повилась возможность протестировать в облаке Oracle.
get_db_memory_json1


  • стенд собран на 3 серверах — 8 Core Intel (16 virtual core), 120 Memory (GB), Oracle Linux 7.7
  • локальные NVMe диски — 6.4 TB NVMe SSD Storage min 250k IOPS (4k block)
  • локальная сеть между серверами — 8.2 Network Bandwidth (Gbps)
  • в режиме прямого чтения из PostgreSQL — до 16 000 [get/sec], сoncurrency 1024, медиана 60 [ms]. Кажды Get запрашивает данные из двух таблиц общим размером 360 000 000 строк. Размер JSON 1800 байт.
  • в режиме кэширования — до 100 000 — 120 000 [get/sec], сoncurrency 1024, медиана 2 [ms].
  • на вставку в PostgreSQL — около 10 000 [insert/sec].
  • при масштабировании с 2 до 4 и 8 Core, рост производительности практически линейный.
Читать дальше →

Бесплатный хостинг Telegram-бота на Google Cloud Platform

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

Почему GCP?


При написание телеграмм ботов столкнулся с вопросом, как быстро и бесплатно сделать так, чтобы бот работал постоянно. Варианты с Heroku и Pythonanywhere имеют слишком маленькие лимиты, если у вас более одного бота. Поэтому я решил воспользоваться GCP. Платформа предоставляет бесплатно 300$ на год + огромные скидки при использование этих средств(до 94%).


Как захостить вашего бота?


Шаг 1. Регистрация на GCP


Переходим на сайт GCP и нажимаем Get started for free.
Читать дальше →

Чего ждать от Java в 2020 году?

Время на прочтение9 мин
Охват и читатели10K
2020 уже в разгаре, давайте же обсудим, какие изменения в мире Java нас ожидают в этом году. В этой статье перечислю основные тренды Java и JDK. И буду рад дополнениям от читателей в комментариях.

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

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

Операционная Система «Сивелькирия»: технологии

Время на прочтение10 мин
Охват и читатели8.1K
Привет, Хабр.

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

В первой статье цикла приводилась краткая информация о структуре данной ОС. Во второй статье описывались цели проекта, а также то, каким образом он предполагает вырваться из порочного круга «нет софта — нет пользователей — нет разработчиков — нет софта». В этот раз основное внимание будет уделено архитектурным вопросам. Будет показано, какими техническими средствами предполагается обеспечить взаимодействие модулей, написанных разными людьми на разных языках и собранных под различные окружения. Кроме того, будут затронуты мелкие детали архитектуры.
Читать дальше →

Swagger в RBK.money — про наши внешние API

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

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


Для этого, кроме того, чтобы просто хорошо делать свою работу, писать правильный код, не бояться использовать современные технологии и в целом не тупить, надо обязательно обращать внимание на две штуки — документация и API. Без них человеку будет трудно понять, с чем вообще он имеет дело, как оно всё работает и что лучше не трогать вообще никогда. Конечно, можно гуглить, что обозначает та или иная спецификация, можно проверять в бою, чего и как (а потом так же бодро откатываться на предыдущую рабочую версию), но лучше, когда человеку дали подробную документацию.



Так вот, о чем я сегодня. В этом посте я расскажу, почему мы в RBK.money используем Swagger, как он помогает нам в работе и какие у него есть косяки.

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

Создание полноценного Viberbot. Часть вторая — первый контакт или «сonversation_started»

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

Отправка первого сообщения пользователю — приветствуем и подписываем


В первой части мы научились запускать стартер устанавливать webhook для нашего проекта botviber.

В этой 2-й мы научимся отправлять первое сообщение показываемое для наших пользователей, создавать ссылки для поиска и запуска нашего бота как внутри ViberURL так и NoViberURL

image

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

Под капотом бота-клиента Яндекс.Музыки

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

Введение


Привет, Хабр! Вновь я с уже второй статьей, затрагивающей API Яндекс.Музыки. Дело запланированное и упоминалось в первой статье.

Руки дошли, дело сделано. Сегодня я расскажу об интересных, на мой взгляд, моментах, которые присутствуют в кодовой базе моего Telegram бота, позиционирующего себя как полноценный клиент я.музыки. Ещё мы затронем API для распознавания музыки от Яндекс.

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

Видеодемонстрация клиента


В основной части я расскажу про следующее:

  1. Авторизация в аккаунт через сайт на GitHub Pages (зачем и почему).
  2. Формат данных, его упаковка и использование в данных для кнопок.
  3. Роутинг апдейтов, версионность данных, прокидывание контекста в обработчики.
  4. Сервисы:
    • Сервис перезаливки трека в Telegram.
    • Сервис «подписок» на получение трека с отправкой статуса о загрузке.
  5. Наипростейшая и элегантная реализация кэширования запросов.
  6. Распознавание трека по голосовому сообщению и как это вообще появилось в боте.
  7. Мелкие заметки.

Если Вас заинтересовал хоть один пункт — добро пожаловать под кат.

ОС «Сивелькирия»: миссия и форма запуска

Время на прочтение9 мин
Охват и читатели4.6K
Привет, Хабр.

Это — вторая статья из серии публикаций о проектируемой на данный момент ОС «Сивелькирия». Первая статья доступна здесь, следующая — здесь. Поскольку в комментариях к ней многократно задавались вопросы о цели всей затеи, а также о количестве труда, которое придётся вложить в разработку, чтобы она «взлетела», в данной публикации основное внимание будет сосредоточено именно на них.

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

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

Как сделать API на любое Android приложение. На примере WhatsApp

Время на прочтение4 мин
Охват и читатели34K
Приветствую! Нарисовалась у меня задача: нужно интегрировать в CRM систему мессенджеры, а то трудно анализировать работу менеджеров, когда они общаются с клиентами используя один общий «рабочий» телефон. И первым делом нужно было подключить WhatsApp, как один из самых популярных мессенджеров у нашей целевой аудитории.
Читать дальше →

Как на архаичном рынке факторинга перевести все сделки в онлайн? Опыт «Сбербанк Факторинга»

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

Для большинства людей факторинг – услуга непонятная. По факту — это финансирование поставок компаний, работающих с отсрочкой платежа.


Предположим, вы небольшой производитель круп. Вы отгрузили товар в торговую сеть, но деньги получите в среднем через 60 дней после отгрузки. Многим компаниям ждать столько не под силу: ту же зарплату сотрудникам нужно платить уже сейчас. Одно из решений — факторинг. После заключения договора факторинга вы можете получить финансирование любой поставки. Достаточно после отгрузки товара отправить фактору подтверждающие документы (счета-фактуры, накладные, акты). Фактор верифицирует поставку у вашего покупателя и перечисляет вам деньги за товар, за вычетом собственной комиссии.


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

Как старая система убивала удобство

Quartz в ASP.NET Core

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

Вступление


Знаю, что на эту тему есть очень много статей и своего рода туториоалов, я уже и не говорю об официальной документации, но при работе над своим последним проектом я столкнулся с очень занятной проблемой, о которой мало где говорится. Речь сегодня пойдет о проблеме использования Dependency Injection и Quartz в проекте на платформе ASP.NET Core.

Началось всё с того, что я не думал, что могут возникнуть какие-то проблемы и скажу сразу, что пробовал использовать различные подходы: добавлял все классы, которые включал в себя Quartz в services и юзать их через DI — мимо (но не полностью, как потом оказалось), пробовал добавить HostedService — тоже не работало (в конце прикреплю несколько хороших ссылок на полезные статьи о работе с Quartz) и так далее. Я уже думал, что у меня проблема с триггером — тоже нет. В этой короткой статье я попытаюсь помочь тем, у кого, возможно, была такая же проблема и надеюсь мое решение поможет им в дальнейшей работе. Под конец вступления хочу добавить, что буду весьма признателен если в комментариях те, кто хорошо знаком с технологией, дадут несколько советов, которые помогут улучшить то, что я предложил.
Читать дальше →

Что делает Free API Московской биржи в Google Таблицах

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

Количество частных инвесторов на Московской бирже удвоилось за последний год и составило 3,86 млн: за 2019 счета на Мосбирже открыли 1,9 млн человек. Санкт-Петербургская биржа, специализирующаяся на торгах акциями иностранных компаний, в прошлом году зафиксировала трехкратный прирост счетов – с 910 000 до 3,06 млн шт.



Это означает, что на рынок пришло почти 2 млн новичков, которые никогда не занимались трейдингом и не использовали специализированный софт для торгов и учета позиций.

Google Таблицы и ИСС Мосбиржи

Создание полноценного Viberbot на Django 2 и Viber REST API. Часть первая — Webhook

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

Установка Webhook для работы bot на viber и отправка первого POST запроса к backend мессенджера


Опираясь на свой опыт разработки под Viber и множество неоднозначных мнений, публикую цикл статей по созданию и запуску viberbot. Для понимая полной картины в целом, будем работать с чистым REST API VIBER, без каких либо оберток.

Радио Вайбер показал себя слишком нестандартно, поэтому мы будем создавать классический диалоговый бот (коих много тысяч развелось в telegram).

Параллельно увидим все недостатки и преимущества botviber и поймем: чему в России легче быть — botviber VS bottelegram, главные отличия бот разработки этих платформ.

image

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

Статья больше расcчитана на новичков, кто не успел разобраться с REST API Viber.

В течение месяца по 1-2 tutorial в неделю кто захочет, тот научиться создавать боты на мессенджере Viber, c личной админ-панель, инструментами рассылки bulk-messages, без каких либо конструкторов и платформ. Также создадим minilanding-page (как у телеграм-ботов) для поиска и продвижения вашего бота.

Я рекомендую параллельно изучать Django, кто еще не начал, и особенностей его работы в develop и production режимах.

Не хватает бота — тогда начнем

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

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

Instagram api на минималках

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

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

Операционная Система «Сивелькирия»: вводное описание

Время на прочтение6 мин
Охват и читатели19K
Привет, Хабр.

Эта статья открывает цикл публикаций об операционной системе «Сивелькирия», на данный момент находящейся на раннем этапе проектирования и разработки. В статьях цикла будут подробно описаны системные проблемы популярных операционных систем и предложены пути их решения. Автор не ставит перед собой цели убедить кого-либо в чём-либо и сосредотачивается исключительно на описании предложенных решений ради извлечения пользы из обсуждения. Публикация будет вестись частями, поскольку объём полного описания выходит за любые разумные ограничения на размер хабростатьи.

Всем, кто заинтересовался, добро пожаловать под кат.
Читать дальше →

CRUD операции с Entities в DialogFlow (C#)

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

Вступление


Совсем недавно я начал работу над новым проектом, который включал в себя работу с уже достаточно известным сервисом (AI) от Google — DialogFlow. Суть заключалась в том, что у нас был бот (Telegram) который работал с API нескольких сайтов, а сам же DialogFlow помогал нам структурировать само общение с человеком, для чего он в принципе и создавался. Нужно сказать, что статья предназначена для людей, которые только начали знакомство с сервисом или уже имеют небольшой опыт, так далее возможны термины: Intent, Context, Action, Event ну и то ради чего мы и собрались — Entities. Надеюсь, что статья будет полезна тем, кто немного не понял как именно через код можно проделывать CRUD операции с Entities.

Entities в DialogFlow


В DialogFlow Entities представляют собой некие сущности, которые состоят из ReferenceValue и Synonyms. Что-то похожее на ключ-значение, только с той разницей, что синонимов может быть много, и чем их больше — тем лучше, поскольку это «упрощает боту жизнь» и ему легче понять о каком значении идет сейчас речь, а поставленная галочка на Fuzzy matching поможет боту еще и понимать о чём идет речь, даже если вы упустили одну букву или другой символ. Выглядит это примерно так:

Москва — москва, Москва, Мсква…

Заканчивая короткий экскурс, хотел бы добавить, что именно с Entity происходит очень много всякой возни. Я конечно же не уменьшаю значение интентов и так далее, но факт остается фактом.
Читать дальше

Микросервисы со Spring Boot. Часть 5. Использование сервера имен Eureka

Время на прочтение4 мин
Охват и читатели24K
В этой заключительной части нашей серии архитектур микросервисов мы научимся включать сервер имен Eureka и позволять микросервисам взаимодействовать с ним.

Это статья входит в серию статей «Микросервисы со Spring Boot»:


В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью Spring Boot и Spring Cloud.

Это руководство поможет вам изучить основы микросервисных архитектур. Мы также начнем рассматривать базовую реализацию микросервиса со Spring Boot.
Читать дальше →

Разворачиваем API с AWS Elastic Beanstalk

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


В конце января мы провели очередной онлайн-интенсив по курсу «Backend-разработчик на PHP». В этот раз темой открытого урока стало создание Telegram-бота для заказа кофе в заведении и оплаты онлайн. Вебинар получился очень насыщенным, поэтому растянулся на два дня: «День 1» и «День 2». Мы же предлагаем вашему вниманию текстовую версию первого дня онлайн-интенсива. Он был посвящён знакомству с AWS Elastic Beanstalk и разворачиванию API с его помощью.

Преподаватель — Михаил Каморин, Senior Backend Developer в Skyeng.
Читать дальше →

Экспорт Google Forms + загрузка Google Script через REST API (Python)

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


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

В официальной документации сам черт ногу сломит, поэтому под катом мы подробно рассмотрим удаленную загрузку и запуск Google Apps Script через REST API, используя Python.
Читать дальше →

Микросервисы со Spring Boot. Часть 4. Использование Ribbon для балансировки нагрузки

Время на прочтение3 мин
Охват и читатели19K
Это часть 4 серии о микросервисных архитектурах, в которой мы сосредоточимся на использовании Ribbon для балансировки нагрузки.

Это статья входит в серию статей «Микросервисы со Spring Boot»:


В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью Spring Boot и Spring Cloud.

Это руководство поможет вам изучить основы микросервисных архитектур. Мы также начнем рассматривать базовую реализацию микросервиса со Spring Boot.
Читать дальше →

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