Обновить
28.57

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

О создании API

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

Как продавать на маркетплейсе, не вздрагивая при слове «инфообмен»

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

Представьте себе ситуацию: вы с детства мечтаете о море, грезите о соленом ветре, южном солнце, криках чаек. И вот, достигнув в жизни многого, вы покупаете себе яхту. Прекрасно! Но что теперь делать с материальным воплощением мечты? Варианта два: научиться управлять ей самостоятельно или — нанять опытного капитана.

Немного изменим условия: вы — продавец, желающий торговать на маркетплейсе, яхта — ваш личный кабинет на нем. Задача — «доплыть со своим товаром» до покупателя. 

Позвольте представиться: капитан дальнего плавания Антон Баташов, руководитель отдела интеграции и технической поддержки в компании XWAY. Мы занимаемся созданием платформ для управления продажами на маркетплейсах. Сегодня я хочу рассказать о том, чем отличается инфообмен с Ozon-ом и с AliExpress, как и почему так получилось, на что стоит обратить внимание начинающему продавцу при выходе на маркетплейс. Ну что ж, ловим попутный ветер и вперед! 

Читать далее

На php тоже может быть легко и быстро

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

На мой взгляд, язык php всегда был довольно хорошим решением для создания сложного бекэнда веб-приложений, а в девяностые и нулевые приобрел такую огромную популярность (именно огромную, сопоставимую с IE для веб-серфига того времени) в первую очередь благодаря легкости, скорости разработки и поддержки кода. Но те времена прошли. Сегодня считается, что приложения на php стали монструозны, долго и сложно запускаемы, способны работать только с подтягиванием множества зависимостей в директорию /vendor...

Зачастую все именно так, но я хочу попробовать вам показать, что может быть иначе. Попробуем сделать простое API и приложить не больше усилий чем при использовании Node.js или Go.

Под катом мой пример того, как можно быстро и без лишней головной боли сделать API на php.

Читать далее

Проектирование интеграции с веб-сервисом

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

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

Читать далее

gRPC vs REST, что выбрать для нового сервера?

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

Всем приветы. А вы писали новый сервер с нуля? Какие технологии использовали? А рассматривали какие-либо варианты кроме старого доброго REST ? А что есть еще что-то ? С такими вопросами я когда-то пришел к своему лиду.  Да, для меня было открытием, что можно использовать не только REST для обмена сообщениями между сервером и клиентом. Ах да, конечно я знал про SOAP, но использовать его уж очень не хотелось. Оказалось, что можно попробовать использовать Thrift или например gRPC. От Thrift пришлось отказаться по ряду причин, которые не сильно важны в данной статье. Кстати, возможно Thrift это именно то что вам нужно. 

Так что же такое gRPC и в чем его отличие от, уже ставшего классическим, REST? Лучше ли gRPC? Может gRPC это снова хипстерская технология, которую все скоро забудут?

   Не для кого ни секрет, что REST доминирует в современном мире API, особенно, когда речь идет о веб-приложениях и инфраструктурах, на основе микросервисов. Мало кто даже вспомнит, про то что микросервисы могут общаться по другому. Это наверное самый популярный ответ на собеседовании. Да если добавить еще feign клиента из Spring, то получается совсем красота и минимальные трудо затраты. Но для определенного набора сценариев использования, модель gRPC начала играть небольшую, но важную роль. Давайте попробуем разобраться, когда же нам стоит использовать REST, а когда gRPC.

Read more gRPC vs REST

Декларативный API на Next.JS — реальность?

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

Привет! Меня зовут Андрей, я Backend Node.JS разработчик в одной из зарубежных компаний, занимающихся разработкой системы для администрирования офисов. Наше приложение и его веб-версия предоставляют арендодателям возможность отслеживать заполненность офиса, обеспечивать подключение IoT-устройств для отслеживания, например, количества еды в холодильниках или остатка воды в кулерах, выдавать пропуски для сотрудников в своё здание и много чего другого. Одним из важнейших узлов в этой системе является API как для внутренних пользователей, использующих приложение или веб-сайт, так и для клиентов, использующих наше Whitelabel решение. Всего в нашей системе зарегистрировано более двух сотен API эндпоинтов, для построения которых мы использовали фреймворк NestJS. Если вы по какой-то причины ещё не слышали про Nest, то я настоятельно рекомендую ознакомиться со статьёй NestJS - тот самый, настоящий бэкенд на nodejs. Одной из основных и наиболее значимых особенностей NestJS является нативная поддержка декораторов, что в свою очередь позволяет создавать эндпоинты декларативно.

Читать далее

2ГИС на CodeFest: пазл 3×1,2 метра и Октокэт

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

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

В конце мая мы успели сходить на CodeFest, где выступили с докладами и подготовили стенд с пазлом в 1440 деталей и конструктором постеров. 

Читать далее

Новые JavaScript-API для работы с аппаратным обеспечением

Время на прочтение4 мин
Охват и читатели15K
Сталкивались ли вы когда-нибудь с необходимостью работы с аппаратным обеспечением устройств из веб-приложения, а, когда оказывалось, что это невозможно, создавали ли нативное приложение для некоей платформы только ради того, чтобы обойти это ограничение? Если вы бывали в подобной ситуации, то знайте, что вы не одиноки. До недавнего времени работа с аппаратным обеспечением из веб-приложений представляла собой весьма запутанную и сложную задачу. Но сейчас, благодаря тому, что в современных браузерах появилась поддержка некоторых новых JavaScript-API, рассчитанных на работу с аппаратным обеспечением, решить эту задачу гораздо проще, чем раньше.



В этом материале речь пойдёт о трёх новых JavaScript-API, направленных на работу с аппаратным обеспечением. В частности — о WebHID, о WebNFC и о WebUSB.
Читать дальше →

Retrofit: удобные разработка и тестирование API

Время на прочтение10 мин
Охват и читатели13K
Если разработчик веб-сервиса хочет дать максимум удобств и пользы клиентам, ему нужно создать общедоступный API для программной работы с этим сервисом. В экосистеме Java есть один подход к разработке API, весьма удобный для программистов. Он заключается в размещении DTO и интерфейсов конечной точки в .jar-файле API и в создании, с использованием фреймворка Retrofit, типобезопасных клиентов для интеграционного тестирования. В этом материале приведён подробный разбор проекта, созданного с применением такого подхода к работе.



Если вы занимались крупными Java-проектами, то вы, наверное, помните старый добрый WSDL (Web Services Description Language, язык описания веб-сервисов), за которым стоят IBM и Microsoft. WSDL — это язык описания веб-сервисов, основанный на XML. А, может, вы всё ещё пользуетесь этим языком? WSDL и его брат-близнец — язык XML Schema, относятся к тем стандартам W3C, которые являются излюбленным объектом ненависти бывалых программистов. Файлы спецификаций WSDL не особенно легко читать людям, а об удобстве их ручного составления лучше и не говорить. Но, к счастью, работать с подобными файлами вручную и не нужно. Они могут быть сгенерированы конечной точкой сервера и переданы прямо в кодогенератор для создания объектов переноса данных (DTO, Data Transfer Object) и стабов сервиса.
Читать дальше →

17 интересных (и забавных) API для вашего проекта

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


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

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

Как тестировать API запросы в Mailchimp

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

Мы тестируем API запросы в Mailchimp заранее, чтобы успешно интегрировать платформу с сайтом.

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

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

Эта статья будет полезна для email-маркетологов, поможет им разобраться, как построить API запросы в Mailchimp и передать их в настройку для backend-разработчика. На сайте запрос настраивается в PHP — пример таких запросов мы тоже будем приводить, но более подробно разберём запросы, которые будет использовать маркетолог.

В теории email-маркетолог должен прочитать справку по API от Mailchimp и на её основе строить запросы и готовить ТЗ для запросов. На практике это может отнимать много времени и сил.

Разберу примеры API запросов в Mailchimp, которые можно будет протестировать. Можно брать примеры этих запросов, менять данные под свой проект и тестировать.

Читать далее

Предотвращение медленных маломощных атак на приложения и API

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

Может показаться, что медленные маломощные атаки (так называемые атаки «Low and Slow») остались в прошлом, но практика показывает, что они до сих пор активно используются злоумышленниками. В 2020 году от таких атак пострадали 65 % организаций, при этом 30 % сталкивались с ними ежемесячно. Поэтому давайте уделим им заслуженное внимание и расскажем, как они осуществляются.

Если злоумышленник хочет парализовать работу приложения, самый простой способ — передача избыточного объема трафика с целью отключения сервера приложения (распределенная атака типа «отказ в обслуживании», или DDoS). Однако сегодня существует немало технологий, способных обнаруживать и блокировать такие атаки на основе IP-адресов или сигнатур, управления квотами, а также с помощью специализированных решений для предотвращения DDoS-атак.

В начале 2021г. мир столкнулся с возвращением старой, но очень действенной техники атак — медленными маломощными атаками. К концу февраля количество атак этого типа, направленных против клиентов Radware, выросло на 20 % по сравнению с четвертым кварталом 2020 года.

Читать далее

Как я доделал функции за Яндекс.Музыкой

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

Можно ли без официального API создавать плейлисты и удалять дубликаты? Статья описывает расширение для браузеров на Chromium. Преследуя цель добавить новые функции на сайт Яндекс.Музыки.

Мой первый крупный опыт работы с JavaScript и что из этого вышло. В решении не используется библиотека от MarshalX, не запрашивается логин/пароль.

Читать далее

Django Rest Framework для начинающих: создаём API для чтения данных (часть 2)

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

В прошлой части мы в общих чертах рассмотрели, как устроен REST API на DRF при работе на чтение. Едва ли не самый сложный для понимания этап — сериализация. Вооружившись исходным кодом, полностью разберем этот этап — от приема набора записей из модели до их преобразования в список словарей.


Важный момент: мы говорим о работе сериалайзера только на чтение, то есть когда он отдаёт пользователю информацию из базы данных (БД) сайта. О работе на запись, когда данные поступают извне и их надо сохранить в БД, расскажем в следующей статье.


Код учебного проекта, который используется в этой статье, доступен в репозитории на Гитхабе.


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

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

Гугл финанс перестал транслировать данные российских акций — что делать? (UPD: починили)

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

С 5 июня 2021 года сайт гугла, и самое главное гугл таблицы - перестали отдавать данные с Московской биржи. 

При попытке получить любые котировки с префиксом MCX, например для Сбербанка, формулой из гугл таблиц =GOOGLEFINANCE("MCX:SBER") теперь всегда возвращается результат #N/A.

А при поиске любой российской бумаги на сайте Google находятся любые рынки, кроме Московской биржи.

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

Google Finance давай, до свидания!

Как синхронизировать сценарий без транзакций? Штатными средствами Java

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

Давайте представим, что вы параноик, и параноик вдвойне, когда дело касается многопоточности. Предположим, что вы делаете backend некого функционала приложения, а приложение переодически дергает на вашем серверы какие-то методы. Все вроде хорошо, но есть одно но. Что если ваш функционал напрямую зависит от каких-либо других данных, того же банального профиля например? Встает вопрос, как гарантировать то, что сценарий отработает именно так, как вы планировали и не будет каких-либо сюрпризов? Транзакции? Да это можно использовать, но что если Вы фантастический параноик и уже представляете как к вам на сервер летит 10 запросов к одному методу от разных клиентов и все строго в одно время. А в этот момент бизнес-логика данного метода завязана на 100500 разных данных. Как всем этим управлять? Можно просто синхронизировать метод и все. Но что если летят еще и те запросы, держать которые нет смысла? Тут уже начинаются костыли. Я пару раз уже задавался подобным вопросом, и были интересно, ведь задача до абсурда простая и повседневная (если вы заботитесь о том, чтобы не было логических багов конечно же ). Сегодня решил подумать, как это можно очень просто и без костылей реализовать. И решение вышло буквально на 100 строк кода.

Немного наглядного примера

Давайте предположим, что есть водитель и есть пассажир. Водитель не может менять машину до тех пор, пока клиент, например подтверждает поездку. Это что получается, клиент соглашался на поездку с одними характеристиками машины, а по факту у водителя другая машина? Не дела! Можно организовать что-то подобное:

Читать далее

Чиним проблемы нагрузок в Go с помощью настройки пула HTTP-соединений

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

- Ребята, кажется, вы таймаутите. Вот трейс, на котором видно, что мы не дождались от вас ответа за 2 секунды. 

- Ничего подобного, у нас все норм — мы за 200 миллисекунд отвечаем в 99% запросов. А вот вы по какой-то причине часто преждевременно обрываете соединение. 

Такой разговор однажды произошёл у нас в Ozon между моей командой личного кабинета продавца и коллегами, которые пишут сервис аутентификации. Причина проблемы оказалась в дефолтных настройках Go для пула HTTP-соединений. Как так вышло, как мы обнаружили проблему и как исправлять подобные ситуации в микросервисах на Go – об этом моя сегодняшняя история. 

Так что же там было?

DocHub: API по-джентльменски

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

- Саш, админы говорят, что у нас 400 полетели адово. Глянь, в чем проблема.
- Странно… все же было хорошо.

Пару часов спустя...

- Коллеги, и в очередной раз у нас изменены контракты без согласования и оповещения! Это уже не первый случай!

Давайте что-то с этим делать!

Дебри графики или как пройти собеседование на программиста компьютерной графики в GameDev

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

Ребята, всем привет!!!

Выдалась у меня свободная минута и решил я собрать небольшой гайд на прохождение собеседования по направлению программиста 3D графики для GameDev компаний. Сам я работаю в данной сфере и очень много общаюсь с различными людьми, теми кто только приходит собеседования и теми, кто уже трудится достаточно давно и за плечами не один выполненный проект и множество решенных рабочих вопросов и задач. Если вам интересная данная тема, то прошу всех под кат.

Для большинства компаний принято разделять данную профессию/направление на два:

Первые - это специалист игровой графики и Вторые - это специалисты компьютерной графики. В чем же разница? Скажем так, первое является закономерным продолжением второго, но не всегда. Например, вы начинаете работать как VFX специалист, создаете партикловые (частицы) эффекты, "прикручиваете" к ним трехмерные модели, собираете все из частей, пишите шейдера и работаете с кодовой базой. То есть здесь вы больше сконцентрированы на визуальном оформлении игры и отдельных ее элементах. В ваши задачи входит разработка визуальных эффектов на "приемлемом" уровне с учетом общей стилистики игры, ее жанра, цветового оформления (хорор, mathc-3d, ферма, песочница и т.д.). Вопросы оптимизации, здесь важны, но они не так глобальны;

Читать далее

Как добавить Natural Language Processing в Minecraft

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

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

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

Читать далее

Как я сделал Discord бота для игровой гильдии с помощью .NET Core

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

Всем привет! Недавно я написал Discord бота для World of Warcraft гильдии. Он регулярно забирает данные об игроках с серверов игры и пишет сообщения в Discord о том что к гильдии присоединился новый игрок или о том что гильдию покинул старый игрок. Между собой мы прозвали этого бота Батрак.

В этой статье я решил поделиться опытом и рассказать как сделать такой проект. По сути мы будем реализовывать микросервис на .NET Core: напишем логику, проведем интеграцию с api сторонних сервисов, покроем тестами, упакуем в Docker и разместим в Heroku. Кроме этого я покажу как реализовать continuous integration с помощью Github Actions.

От вас не потребуется никаких знаний об игре. Я написал материал так чтобы можно было абстрагироваться от игры и сделал заглушку для данных об игроках. Но если у вас есть учетная запись в Battle.net, то вы сможете получать реальные данные.

Читать далее

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