"Великолепный api без rest", Констатин Якушев (badoo)
TRANSCRIPT
![Page 1: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/1.jpg)
Константин Якушев
Великолепный API без REST
![Page 2: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/2.jpg)
Константин Якушев
Великолепный API без REST
![Page 3: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/3.jpg)
Telegram group:bit.ly/devconf-common
![Page 4: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/4.jpg)
Мои API2014 — Everada 2015 — Timepad2016 — Badoo
http://shop.oreilly.com/product/9780596801694.do
![Page 5: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/5.jpg)
API
435активныхA/B-тестов
5-10изменений
каждуюнеделю
314млн.
пользователей
![Page 6: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/6.jpg)
У нас тутсвоя атмосфера
![Page 7: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/7.jpg)
![Page 8: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/8.jpg)
Используйте json через http,уведомления через websocket
![Page 9: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/9.jpg)
ОбычноКлиент php-код
websocket/SSE
запрос
ответ
уведомление
![Page 10: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/10.jpg)
Одно соединениеКлиент proxy php-код
постоянное соединениезапрос запрос
ответответ
уведомлениеуведомление
![Page 11: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/11.jpg)
Google protobuf✦ Бинарный
✦ Есть файл описания и автогенерация
✦ Нет сложившихся паттернов
![Page 12: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/12.jpg)
message Person { optional string name = 1; // SRV-123 Full name required int32 id = 2; // SRV-123 id for URL repeated string photo_url = 3;}
![Page 13: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/13.jpg)
Бинарный протоколтоже отлично подойдёт
Используйте json через http,уведомления через websocket
![Page 14: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/14.jpg)
Передавайте данные,а не их представление
![Page 15: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/15.jpg)
GET /popularity_history
GET /current_user
GET /rank
![Page 16: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/16.jpg)
GET_POPULARITY_PAGE
![Page 17: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/17.jpg)
GET_SUPER_POWERS_PAGE
![Page 18: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/18.jpg)
Несколько лет назад
![Page 19: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/19.jpg)
![Page 20: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/20.jpg)
Передавайте данные,а не их представление
Промо-страницы передавайте «как есть»
![Page 21: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/21.jpg)
Автоматически собирайте документацию из полей
![Page 22: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/22.jpg)
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}
![Page 23: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/23.jpg)
![Page 24: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/24.jpg)
![Page 25: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/25.jpg)
Автоматически собирайте документацию из полей
Пишите документацию руками по реальным экранам
![Page 26: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/26.jpg)
Если придётся ломать совместимость, добавляйте
номера версий /v1, /v2
![Page 27: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/27.jpg)
![Page 28: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/28.jpg)
ОбычноVersion 2:
✦ Обрезка работы/образования на сервере
✦ Новый формат поля User
✦ 3 новых уведомления
✦ …
![Page 29: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/29.jpg)
![Page 30: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/30.jpg)
Поэтапное включение1. Клиент ставит флаг «Я знаю про новый механизм»
2. Сервер показывает новое поведение такому клиенту
3. Когда все клиенты поддерживают флаг, его можно убрать
![Page 31: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/31.jpg)
Сколько версий у приложений badoo?
iOS 6Только Россия и Великобритания
Только Android в Бразилии
50% пользователей
5% платящих пользователейТолько Windows Phone
Android 2.3
![Page 32: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/32.jpg)
Клиент СерверЯ поддерживаю такую-то фичу
Проверяю, нужно ли её включать
ВключайВключаю
![Page 33: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/33.jpg)
Если придётся ломать совместимость, добавляйте
номера версий /v1, /v2
Версионируйте флагами поддержки функций
![Page 34: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/34.jpg)
Бинарные протоколы не хуже http
Передавать «чистые данные» совсем не обязательно
Документацию лучше писать про конкретные случаи
Итого
Версионировать лучше флагами поддержки, а не номерами версий
![Page 35: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/35.jpg)
Думайте же головой
![Page 36: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/36.jpg)
Что читать
https://techblog.badoo.com/blog/2016/05/11/crazy-agile-api/
![Page 37: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/37.jpg)
Что смотреть
https://www.youtube.com/watch?v=Wkw4TOBEKUY
![Page 38: "Великолепный API без Rest", Констатин Якушев (Badoo)](https://reader038.vdocuments.site/reader038/viewer/2022102709/586f91021a28ab54768b7acd/html5/thumbnails/38.jpg)
Спасибо!