Евгений Сайты › Peppers Сбер ID
Сайты, SEO и GEO, реклама, чат-боты, ИИ и дизайн | Москва
Рейтинг
9 371
№ 111 в каталоге
Отзывы
Профессионализм
9/10
Коммуникация
9 /10
Город
Москва
Опыт работы
11 лет
На сайте с
2016 года
Юридический статус
Самозанятый
Freelance.Boutique
Премиум-сервис для лучших исполнителей

Разработка API для службы доставки воды: REST на FastAPI, вход через OAuth для приложения и партнёров, Веб-API для курьеров

Используемые навыки FastAPI OAuth REST Веб-API Разработка API

Описание

У московской службы доставки питьевой воды в бутылях по 19 литров появился единый программный интерфейс на FastAPI: от него работают новое мобильное приложение, партнёры и курьеры. Разработка API — работа Евгения Рослякова. Сайтами и их серверной частью он занимается с 2016 года, оформлен как самозанятый, подписывает договор, для юрлиц даёт закрывающие документы и берёт заказы в Москве и удалённо.

Компания возит воду по Москве и области. Заказы шли через сайт и по телефону. Среди клиентов много офисов, и два офисных центра с сервисами для арендаторов захотели заказывать воду автоматически, без звонков администратору.

Мешал старый сайт. Данные он отдавал кусками: адреса в одном месте, цены в другом, а остаток бутылей у клиента не получить вообще. Описания нигде не было, программист партнёра гадал, что значит каждое поле. Параллельно делали мобильное приложение, и ему нужен был надёжный источник данных.

Цель такая: интерфейс, на который можно опереться и приложению, и партнёрам, и курьерской программе. У каждого свой ограниченный доступ, изменения не ломают чужие интеграции, описание лежит в открытом виде.

У этого товара есть особенность: тару возвращают. Поэтому в данных нужен не только заказ, но и баланс бутылей у клиента.

Решение

Начал с карты данных. Вместе с диспетчерами выписал, что реально происходит в работе: адрес доставки, товар, интервал, заказ, возврат тары, баланс бутылей. Из этого получился набор ресурсов.

Сервис написан на FastAPI. Он собирает схему из описаний полей, поэтому документация в формате OpenAPI не пишется отдельно и не расходится с кодом. Интерфейс построен по принципам REST: адреса, товары, интервалы доставки, заказы и возврат тары — отдельные ресурсы с понятными методами. Баланс бутылей отдаётся вместе с профилем клиента. Создание заказа защищено ключом идемпотентности: если партнёр из-за обрыва связи отправит запрос дважды, заказ появится один раз.

Доступ закрыт через OAuth 2.0. Мобильное приложение входит по схеме с PKCE, токены живут недолго и обновляются сами. Партнёры получают свои ключи по схеме client credentials и видят только свои заказы и только нужные методы. Права разведены: партнёр не может поменять цену, курьер не видит чужих клиентов.

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

Веб-API для курьерского приложения вышло отдельным: маршрут на день, отметка о доставке, приём пустых бутылей. Старый сайт переключили на тот же интерфейс, чтобы данные не жили в двух местах.

Результат

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

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

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

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

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

Оценили проект:

Другие проекты

Все проекты →
Маркетинг и Продвижение Продвижение в интернете бренда купальников в ОАЭ: продвижение в Instagram, маркетинг и реклама в Instagram, Meta Pixel
Продвижение в интернете бренда купальников в ОАЭ: продвижение в Instagram, маркетинг и реклама в Instagram, Meta Pixel
26
ИИ и Нейросети ИИ-агенты для продаж каркасных бань: диалог на GPT-4, расчёт через LangChain, разбор фото участка в Gemini
ИИ-агенты для продаж каркасных бань: диалог на GPT-4, расчёт через LangChain, разбор фото участка в Gemini
15
Веб-разработка и IT Создание сайта: вёрстка для агентства недвижимости из Figma на Tailwind CSS, Bootstrap, Sass и Gulp.js
Создание сайта: вёрстка для агентства недвижимости из Figma на Tailwind CSS, Bootstrap, Sass и Gulp.js
15
Веб-разработка и IT Чат-боты для продаж в соцсетях: ИИ-бот для Instagram Direct магазина украшений на Instagram API, ChatGPT-4 и Whisper AI
Чат-боты для продаж в соцсетях: ИИ-бот для Instagram Direct магазина украшений на Instagram API, ChatGPT-4 и Whisper AI
24