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

Post on 06-Jan-2017

13.591 Views

Category:

Technology

11 Downloads

Preview:

Click to see full reader

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

Спасибо!

top related