"Великолепный api без rest", Констатин Якушев (badoo)
TRANSCRIPT
Константин Якушев
Великолепный API без REST
Константин Якушев
Великолепный API без REST
Telegram group:bit.ly/devconf-common
Мои API2014 — Everada 2015 — Timepad2016 — Badoo
http://shop.oreilly.com/product/9780596801694.do
API
435активныхA/B-тестов
5-10изменений
каждуюнеделю
314млн.
пользователей
У нас тутсвоя атмосфера
Используйте json через http,уведомления через websocket
ОбычноКлиент php-код
websocket/SSE
запрос
ответ
уведомление
Одно соединениеКлиент proxy php-код
постоянное соединениезапрос запрос
ответответ
уведомлениеуведомление
Google protobuf✦ Бинарный
✦ Есть файл описания и автогенерация
✦ Нет сложившихся паттернов
message Person { optional string name = 1; // SRV-123 Full name required int32 id = 2; // SRV-123 id for URL repeated string photo_url = 3;}
Бинарный протоколтоже отлично подойдёт
Используйте json через http,уведомления через websocket
Передавайте данные,а не их представление
GET /popularity_history
GET /current_user
GET /rank
GET_POPULARITY_PAGE
GET_SUPER_POWERS_PAGE
Несколько лет назад
Передавайте данные,а не их представление
Промо-страницы передавайте «как есть»
Автоматически собирайте документацию из полей
message SuperPowerPage { repeated Promo promos = 1; // List of promos optional string button_text = 2; // Text to display // in button }
message Promo { optional string photo_url = 1; // Person’s photo optional string icon_url = 2; // Icon image optional string promo_text = 3; // Text under promo}
Автоматически собирайте документацию из полей
Пишите документацию руками по реальным экранам
Если придётся ломать совместимость, добавляйте
номера версий /v1, /v2
ОбычноVersion 2:
✦ Обрезка работы/образования на сервере
✦ Новый формат поля User
✦ 3 новых уведомления
✦ …
Поэтапное включение1. Клиент ставит флаг «Я знаю про новый механизм»
2. Сервер показывает новое поведение такому клиенту
3. Когда все клиенты поддерживают флаг, его можно убрать
Сколько версий у приложений badoo?
iOS 6Только Россия и Великобритания
Только Android в Бразилии
50% пользователей
5% платящих пользователейТолько Windows Phone
Android 2.3
Клиент СерверЯ поддерживаю такую-то фичу
Проверяю, нужно ли её включать
ВключайВключаю
Если придётся ломать совместимость, добавляйте
номера версий /v1, /v2
Версионируйте флагами поддержки функций
Бинарные протоколы не хуже http
Передавать «чистые данные» совсем не обязательно
Документацию лучше писать про конкретные случаи
Итого
Версионировать лучше флагами поддержки, а не номерами версий
Думайте же головой
Что читать
https://techblog.badoo.com/blog/2016/05/11/crazy-agile-api/
Что смотреть
https://www.youtube.com/watch?v=Wkw4TOBEKUY
Спасибо!