"Великолепный api без rest", Констатин Якушев (badoo)

38
Константин Якушев Великолепный API без REST

Upload: badoo-development

Post on 06-Jan-2017

13.591 views

Category:

Technology


11 download

TRANSCRIPT

Page 1: "Великолепный API без Rest", Констатин Якушев (Badoo)

Константин Якушев

Великолепный API без REST

Page 2: "Великолепный API без Rest", Констатин Якушев (Badoo)

Константин Якушев

Великолепный API без REST

Page 3: "Великолепный API без Rest", Констатин Якушев (Badoo)

Telegram group:bit.ly/devconf-common

Page 4: "Великолепный API без Rest", Констатин Якушев (Badoo)

Мои API2014 — Everada 2015 — Timepad2016 — Badoo

http://shop.oreilly.com/product/9780596801694.do

Page 5: "Великолепный API без Rest", Констатин Якушев (Badoo)

API

435активныхA/B-тестов

5-10изменений

каждуюнеделю

314млн.

пользователей

Page 6: "Великолепный API без Rest", Констатин Якушев (Badoo)

У нас тутсвоя атмосфера

Page 7: "Великолепный API без Rest", Констатин Якушев (Badoo)
Page 8: "Великолепный API без Rest", Констатин Якушев (Badoo)

Используйте json через http,уведомления через websocket

Page 9: "Великолепный API без Rest", Констатин Якушев (Badoo)

ОбычноКлиент php-код

websocket/SSE

запрос

ответ

уведомление

Page 10: "Великолепный API без Rest", Констатин Якушев (Badoo)

Одно соединениеКлиент proxy php-код

постоянное соединениезапрос запрос

ответответ

уведомлениеуведомление

Page 11: "Великолепный API без Rest", Констатин Якушев (Badoo)

Google protobuf✦ Бинарный

✦ Есть файл описания и автогенерация

✦ Нет сложившихся паттернов

Page 12: "Великолепный API без Rest", Констатин Якушев (Badoo)

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)

Бинарный протоколтоже отлично подойдёт

Используйте json через http,уведомления через websocket

Page 14: "Великолепный API без Rest", Констатин Якушев (Badoo)

Передавайте данные,а не их представление

Page 15: "Великолепный API без Rest", Констатин Якушев (Badoo)

GET /popularity_history

GET /current_user

GET /rank

Page 16: "Великолепный API без Rest", Констатин Якушев (Badoo)

GET_POPULARITY_PAGE

Page 17: "Великолепный API без Rest", Констатин Якушев (Badoo)

GET_SUPER_POWERS_PAGE

Page 18: "Великолепный API без Rest", Констатин Якушев (Badoo)

Несколько лет назад

Page 19: "Великолепный API без Rest", Констатин Якушев (Badoo)
Page 20: "Великолепный API без Rest", Констатин Якушев (Badoo)

Передавайте данные,а не их представление

Промо-страницы передавайте «как есть»

Page 21: "Великолепный API без Rest", Констатин Якушев (Badoo)

Автоматически собирайте документацию из полей

Page 22: "Великолепный API без Rest", Констатин Якушев (Badoo)

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)
Page 24: "Великолепный API без Rest", Констатин Якушев (Badoo)
Page 25: "Великолепный API без Rest", Констатин Якушев (Badoo)

Автоматически собирайте документацию из полей

Пишите документацию руками по реальным экранам

Page 26: "Великолепный API без Rest", Констатин Якушев (Badoo)

Если придётся ломать совместимость, добавляйте

номера версий /v1, /v2

Page 27: "Великолепный API без Rest", Констатин Якушев (Badoo)
Page 28: "Великолепный API без Rest", Констатин Якушев (Badoo)

ОбычноVersion 2:

✦ Обрезка работы/образования на сервере

✦ Новый формат поля User

✦ 3 новых уведомления

✦ …

Page 29: "Великолепный API без Rest", Констатин Якушев (Badoo)
Page 30: "Великолепный API без Rest", Констатин Якушев (Badoo)

Поэтапное включение1. Клиент ставит флаг «Я знаю про новый механизм»

2. Сервер показывает новое поведение такому клиенту

3. Когда все клиенты поддерживают флаг, его можно убрать

Page 31: "Великолепный API без Rest", Констатин Якушев (Badoo)

Сколько версий у приложений badoo?

iOS 6Только Россия и Великобритания

Только Android в Бразилии

50% пользователей

5% платящих пользователейТолько Windows Phone

Android 2.3

Page 32: "Великолепный API без Rest", Констатин Якушев (Badoo)

Клиент СерверЯ поддерживаю такую-то фичу

Проверяю, нужно ли её включать

ВключайВключаю

Page 33: "Великолепный API без Rest", Констатин Якушев (Badoo)

Если придётся ломать совместимость, добавляйте

номера версий /v1, /v2

Версионируйте флагами поддержки функций

Page 34: "Великолепный API без Rest", Констатин Якушев (Badoo)

Бинарные протоколы не хуже http

Передавать «чистые данные» совсем не обязательно

Документацию лучше писать про конкретные случаи

Итого

Версионировать лучше флагами поддержки, а не номерами версий

Page 35: "Великолепный API без Rest", Констатин Якушев (Badoo)

Думайте же головой

Page 36: "Великолепный API без Rest", Констатин Якушев (Badoo)

Что читать

https://techblog.badoo.com/blog/2016/05/11/crazy-agile-api/

Page 37: "Великолепный API без Rest", Констатин Якушев (Badoo)

Что смотреть

https://www.youtube.com/watch?v=Wkw4TOBEKUY

Page 38: "Великолепный API без Rest", Констатин Якушев (Badoo)

Спасибо!