Обновить
28.22

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

О создании API

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

HackUniversity 2020 — первое призовое место

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

HackUniversity Logo


GitHub нашего проекта — Backend, Mobile, скриншоты.


Из названия понятно, что я со своей командой "Four Annoying Bugs" в очередной (второй) раз поучаствовал в хакатоне. В этот раз нам удалось занять 3 из 14 место, по треку “Умный город” от компании Here. Однако и этот хакатон не прошел без приключений.

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

Moscow travel hack глазами участников

Время на прочтение10 мин
Охват и читатели2K
Команды Аэроклуб ИТ на Moscow travel hack

Привет! Вы наверняка слышали про первый в России хакатон по теме цифровизации индустрии туризма. Компанию Аэроклуб ИТ представляли на нём сразу две команды, и нам удалось не только отлично провести время, но и разработать прототипы проектов, попробовать силы в необычном для себя формате работы, и пообщаться с другими участниками. Под катом – история одной из наших команд!

Использование API Gateway в качестве единой точки входа для веб-приложений и API

Время на прочтение4 мин
Охват и читатели61K
Перевод статьи подготовлен специально для студентов курса «Архитектор высоких нагрузок».




Введение


Преимущества AWS, такие как высокая доступность, масштабируемость и эластичность, уже доказали свою эффективность для SaaS-провайдеров (Software-as-a-Service). При модернизации SaaS-приложений, AWS помогает плавно перейти на микросервисную архитектуру с предоставлением API-доступа внешним приложениям.

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

API Gateway помогает в создании мультитенантной микросервисной архитектуры. В такой архитектуре для обслуживания разных клиентов используется один экземпляр микросервиса, что позволяет более оптимально использовать ресурсы и оптимизировать затраты. В такой конфигурации для обслуживания своих клиентов от провайдеров требуется поддержка “white-label”-доменов, а также возможность идентификации клиентского домена для привязки специфичной бизнес-логики к конкретному клиенту в бэкенде.

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

Анализируйте свои сборки программно с помощью C ++ Build Insights SDK

Время на прочтение4 мин
Охват и читатели2.5K
Рады рассказать о выпуске C++ Build Insights SDK, фреймворка, который дает вам доступ к информации о времени сборки MSVC через API C и C++. В дополнение к этому выпуску мы публикуем vcperf open source на GitHub. Поскольку сам vcperf построен с использованием SDK, вы можете использовать его в качестве справочного материала при разработке собственных инструментов. Мы будем рады увидеть, какие приложения вы будете создавать с помощью SDK, и мы с нетерпением ждем ваших отзывов!

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

Приматы и JavaScript на службе вашего богатства

Время на прочтение7 мин
Охват и читатели4.3K
Журналисты ежедневной американской деловой газеты «Уолл-стрит джорнэл» пишут, что «в этом финансовом эксперименте не пострадало ни одно животное, но эго некоторых человеческих существ было сильно уязвлено».


Вместо обезьяны всё сделает JavaScript

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

Предлагаю повторить эксперимент в домашних условиях, тем более что живая обезьяна после прочтения этой статьи вам не понадобится — JavaScript image всё сделает в лучшем виде.

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

В статье приведу код эксперимента и дам ссылку на гитхаб.
JavaScript плюс API вместо обезьяны и ни одно животное не пострадает

.Net Core Api: получение данных в запросе из разных источников

Время на прочтение8 мин
Охват и читатели9.7K
В .Net Core есть встроенный механизм Model Binding, позволяющий не просто принимать входные параметры в контроллерах, а получать сразу объекты с заполненными полями. Это позволяет встроить в такой объект все нужные проверки с помощью Model Validation.

Вот только данные, нужные для работы API, приходят нам не только из Query или Body. Какие-то данные нужно получить из Headers (в моем случае там был json в base64), какие-то — из внешних сервисов или ActionRoute, если вы используете REST. Для получения данных оттуда можно использовать свой Binding. Правда и тут есть проблема: если вы решили не нарушать инкапсуляцию и инициализировать модель через конструктор, то придется пошаманить.

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

ОС «Сивелькирия»: процесс разработки ПО

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

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

Вирусная эпидемия требует удалённой работы, а значит — цифровой подписи документов

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


В США довольно популярен сервис Service Experts по удалённому найму сантехников, специалистов по отоплению, кондиционированию воздуха и так далее. В России тоже есть аналогичные сайты: очень удобно быстро подобрать мастера. Хотя в нынешних условиях лучше самостоятельно прибить эту полку, чтобы вообще ни с кем не контактировать. Так или иначе, недавно компания USAFact (провайдер скрининга для тысяч компаний, в том числе Service Experts) подписала договор с GlobalSign на индивидуальное внедрение сервиса цифровой подписи (Digital Signing Service), который был развёрнут за четыре месяца — и теперь действует для предварительного скрининга всех мастеров Service Experts.

Это пример, как можно организовать удалённую работу наёмных сотрудников с корректным оформлением документов. Актуально в нынешней ситуации.
Читать дальше →

Wechat или действительно всеобъемлющее приложение. Что с ним может делать разработчик

Время на прочтение9 мин
Охват и читатели35K
Я уже не раз и не два писал про этот мессенджер. Но он настолько всеобъемлющ, полезен, используется настолько широко и предоставляет настолько гигантский инструментарий, что всего не упомянешь и в двадцати статьях. Тут я все же попытаюсь собрать все, что он может предложить и что из этого может извлечь разработчик(или же компания, ведущая любой бизнес).
Читать дальше →

Создание VK чат-бота на базе VkBotCore C#

Время на прочтение3 мин
Охват и читатели10K
Данная статья создана для ленивых людей, которые не хотят много кодить и иметь дело со всей «начинкой».

Подготовка группы


Для начала нам необходимо создать сообщество, которое будет привязано к нашему боту.

Для этого заходим в раздел «Сообщества» и нажимаем «Создать сообщество»

image

Теперь настроим его для работы с Callback-API //Подробнее про Callback-API

Переходим в «Управление»>>
Читать дальше →

Шаблон backend сервера на Golang — часть 1 (HTTP сервер)

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

UPD. Ссылка на новый репозиторий проекта с поддержкой развертывания в Kubernetes


Представленный ниже шаблон сервера на Golang был подготовлен для передачи знаний внутри нашей команды. Основная цель шаблона, кроме обучения — это снизить время на прототипирование небольших серверных задач на Go.


Шаблон включает:


  • Передачу параметров сервера через командную строку github.com/urfave/cli
  • Настройка параметров сервера через конфигурационный файл github.com/sasbury/mini
  • Настройка параметров TLS HTTP сервера
  • Настройка роутера регистрация HTTP и prof-обработчиков github.com/gorilla/mux
  • Настройка уровней логирования без остановки сервера github.com/hashicorp/logutils
  • Настройка логирования HTTP трафика без остановки сервера
  • Настройка логирования ошибок в HTTP response без остановки сервера
  • HTTP Basic аутентификация
  • MS AD аутентификация gopkg.in/korylprince/go-ad-auth.v2
  • JSON Web Token github.com/dgrijalva/jwt-go
  • Запуск сервера с ожиданием возврата в канал ошибок
  • Использование контекста для корректной остановки сервера и связанных сервисов
  • Настройка кастомной обработки ошибок github.com/pkg/errors
  • Настройка кастомного логирования
  • Сборка с внедрением версии, даты сборки и commit

Вторая часть посвящена прототипированию REST API.


Третья часть посвящена развертыванию шаблона в Docker, Docker Compose, Kubernetes (kustomize).


Пятая часть посвящена оптимизации Worker pool и особенностям его работы в составе микросервиса, развернутого в Kubernetes.


Ссылка на репозиторий проекта.

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

Создаем CRUD API на Express и MySQL: часть вторая

Время на прочтение7 мин
Охват и читатели8.2K
Всем привет. В преддверии старта курса «Разработчик Node.js», хотим поделиться продолжением материала, который был написан нашим внештатным автором.





Всем еще раз привет. Мы возвращаемся к созданию приложения на Node.js и MySQL для небольшого todo — приложения на Node.js для React. С прошлого раза я немного пересмотрел структуру нашего приложения, и теперь решил добавить дополнительную колонку в базу данных под названием inner_key, которая будет необходима нам для отрисовки уникальных ключей для каждого отдельного дела (в списке повторяющихся элементов React нужен уникальный ключ на каждый элемент для его обработки в Virtual DOM. Если это по прежнему вызывает у вас вопросы, вам стоит изучить эту статью).
Читать дальше →

Управление Tion S3 и его подключение к умному дому

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

У TIONofficial есть замечательный продукт: бризер — система активной приточной вентиляции с фильтрами (и теперь с подогревом уличного воздуха). Такие относительно большие ящики, которые через дырку в стене засасывают уличный воздух, прогоняют через фильтры и тадам: в комнате чистый и свежий воздух.


Смотреть на них я начал несколько лет назад, тогда эти устройства управлялись обычным ИК пультом и интегрировать их в любой умный дом было относительно не сложно: умный ИК пульт + сграбить нужные команды управления. Новые же девайсы управляются модно, со смартфона, а пульт перестал быть оптическим. И вот тут с интеграцией возникла проблема: через телефон управлять можно, а вот к контроллеру умного дома уже не подключишь.


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


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

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

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

Создаем свою CRUD API на Express и MySQL: часть первая

Время на прочтение6 мин
Охват и читатели33K
Всем привет. В преддверии старта курса «Fullstack разработчик JavaScript», хотим поделиться небольшим материалом, который был написан нашим внештатным автором.



Express один из самых популярных веб-фреймворков, который поддерживает роутинг, миддлвейрс и систему шаблонов. Делать бэкенд на Node.js без Express в 2020 году — довольно странное занятие, ведь Express де-факто — каркас для создания веб-приложения на Node.js.
Сегодня мы попробуем создать несложное CRUD API используя базу данных MySQL. Опытный в Node.js читатель спросит, а где же MongoDB, с которым Node.js обычно применятся в паре но, скажу сразу, это статья больше для PHP разработчиков, которые хотят немного потрогать Node.js, и чтобы смягчить переход в новую экосистему мы воспользуемся MySQL. API мы будем создавать для несложного Todo приложения, на тот случай, если кто-то захочет к своей todo (и даже неважно, написанной с помощью React или нет), присоединить немного бэка и поиграть с ним.
Читать дальше →

Как GraphQL-ить на Kotlin и Micronaut и создать единую точку доступа к API нескольких микросервисов

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

GraphQL — это язык запросов к API, разработанный Facebook. В этой статье будет рассмотрен пример реализации GraphQL API на JVM, в частности, с использованием языка Kotlin и фреймворка Micronaut; большая часть примеров может быть переиспользована на других Java/Kotlin фреймворках. Затем будет показано как объединить несколько GraphQL сервисов в единый граф данных, чтобы предоставить общий интерфейс доступа ко всем источникам данных. Это реализовано с использованием Apollo Server и Apollo Federation. В итоге будет получена следующая архитектура:


architecture

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

Структурированный протокол обмена данных Protobuf или JSON во фронтенде?

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

В новом проекте в нашей команде мы выбрали frontend framework VUE для нового продукта, бэкенд написан на PHP, и уже как 17 лет успешно работает.

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

Работа с API КОМПАС-3D → Урок 17 → Текстовый документ

Время на прочтение6 мин
Охват и читатели7.4K
На предыдущих уроках цикла мы подробно рассмотрели различные средства работы с текстом. КОМПАС позволяет создавать текстовые документы. Они отличаются от файлов, создаваемых стандартным блокнотом Windows наличием оформления в виде основной надписи различных видов.

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


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

Упрощаем написание HTTP обработчиков на Golang

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

При обработке входящего HTTP запроса требуется выполнить большое количество действий, таких как:


  • Логирование входящего HTTP запроса
  • Проверка на допустимость HTTP метода
  • Выполнение аутентификации (basic, MS AD, ...)
  • Проверка валидности token (при необходимости)
  • Считывание тела (body) входящего запроса
  • Считывание заголовка (header) входящего запроса
  • Собственно обработка запроса и формирование ответа
  • Установка HSTS Strict-Transport-Security
  • Установка Content-Type для исходящего ответа (response)
  • Логирование исходящего HTTP ответа
  • Запись заголовка (header) исходящего ответа
  • Запись тела исходящего ответа
  • Обработка и логирование ошибок
  • Обработка defer recovery для восстановления после возможной panic

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


Повторять все это в каждом HTTP обработчике крайне неэффективно.


Даже если вынести весь код в отдельные подфункции, все равно получается примерно по 80-100 строк кода на каждый HTTP обработчик без учета собственно обработки запроса и формирования ответа.


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


Этот подход реализован в шаблоне backend сервера на Golang

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

Как работать с API Google Таблиц (Google Sheets API v4) на языке R с помощью нового пакета googlesheets4

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

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


В этой статье мы разберёмся с тем, как на языке программирования R работать с Google Sheets API v4 с помощью пакета googlesheets4, а точнее:


  • Как пройти авторизацию для работы с Google Таблицами по API;
  • Рассмотрим основные функции пакета;
  • Разберём примеры кода для чтения данных, создания новых таблиц и выполнения других манипуляций с Google Таблицами по API.

Также эта статья поможет пользователям устаревшего пакета googlesheets мигрировать на новый googlesheets4.


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


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

Логирование в микросервисной среде .Net на практике

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


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


В .Net Core 3 добавилась отличная возможность передачи контекста корреляции в HTTP-заголовках, поэтому если ваши приложения используют прямые HTTP-вызовы для межсервисного взаимодействия, то вы можете воспользоваться этой коробочной функцональностью. Однако, если архитектура вашего бекенда подразумевает взаимодействие через брокера сообщений (RabbitMQ, Kafka и т.п.), то вам по-прежнему необходимо озаботиться темой передачи корелляционного контекста через эти сообщения самостоятельно.


В этой статье мы возьмём простое веб-апи приложение и организуем логирование, которое будет


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

  • иметь единую точку входа с удобным анализом, чтобы инструментом логирования смогла пользоваться даже Поддержка, к которой летят вопросы вроде «у меня тут в приложении выскочила ошибка с таким-то айдишником запроса»


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

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