Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Versioning

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 Versioning

Avatar for Oleg Kovalov

Oleg Kovalov

May 26, 2020
Tweet

More Decks by Oleg Kovalov

Other Decks in Programming

Transcript

  1. - Gopher for ~5 years - Open source contributor -

    Engineer at allegro.pl core team https://olegk.dev Кто я 2
  2. - Продукт меняется - Выкатывать изменения по чуть-чуть - Упростить

    миграцию, а еще чтобы не развалилось Кто этот Versioning 3
  3. - Команд много, а сервисов еще больше - Люди ошибаются,

    техника тоже - Конечно же автоматизация Версионирование это важно 4
  4. - Договариваемся какое API - Вот тут у нас поле

    будет строкой - А тут мы хотим вот такой параметр - Прочитайте README.md там “все” есть - А если чего-то нет - решим как будет правильно Джентельменское соглашение 5
  5. Pros: - Простое и рабочее - Хорошо для маленьких проектов

    Cons: - Никаких железобетонных гарантий - Неустойчиво к человеческим ошибкам Джентельменское соглашение 6
  6. - А что если использовать схему - А давайте генерировать

    код сами - А можно еще валидировать схему - А пусть версия будет в Content-Type - А может лучше параметром в URL - А можно даже полем в JSON - А вот в другой команде... - ... - А может что-то лучше? А давайте напишем свой велосипед 7
  7. Pros: - можно покодить - работает для нашего случая Cons:

    - нужно покодить - работает для нашего случая (и только) А давайте напишем свой велосипед 8
  8. - У нас есть 1 спецификация для всех - Уже

    готов туллинг от сообщества и нуждающихся - Остаётся только завести к себе в prod - Делаем схему, а по ней генерируем клиент/сервер - Делаем сервер/клиент, по нему генерируем схему - ¯\_(ツ)_/¯ OpenAPI Specification 9
  9. 10

  10. 11

  11. Pros: - Работает для огромного большинства случаев - Проверен потом

    и кровью - Схема == закон Cons: - Нужно начать делать - Нужно понять, что вам он нужен OpenAPI 13
  12. - JSON-RPC - откажемся от REST - gRPC - решение

    от Google - Thrift - как gRPC, только от Apache Foundation - GraphQL - Facebook & co - ... Есть ли жизнь после OpenAPI ? 14
  13. - REST -> RPC - Уже Protobuf - добавление полей

    бесплатно - HTTP1/2 -> HTTP2 - Кодогенерация - Бинарный gRPC 15
  14. syntax = "proto3"; service Greeter { rpc SayHello (HelloRequest) returns

    (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; } Обычный proto файл 16
  15. syntax = "proto3"; service Greeter { rpc SayHello (HelloRequest) returns

    (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; string personalized = 2; } Обычный proto файл v2 17
  16. Pros: - RPC, Protobuf - Performance++ - Все и вместе

    Cons: - Не все языки, а значит и клиенты (но уже работает в браузерах) - Дополнительный туллинг gRPC 18
  17. - Универсальный / гибкий - Возможность передать батч запросов -

    Data, not a view - RFC3339 для даты это круто, но timestamp универсальнее - Не стоит форматировать и добавлять HTML - One way to do it - странно иметь /preferences - и параллельно /settings?user=foo - когда оба делают одно и тоже Хороший протокол 19
  18. - Приспособлен к изменениям - - Не удаляем старое поведение

    - к примеру в gRPC не надо удалять старые поля - по стоимости будет 0.00$ - Всегда стоит подумать о миграции на новую версию Хороший протокол 20
  19. - Идея ведь хорошая - Но далеко не для всех

    - Слишком много клиент знает Брать можно и полезно, но делать аккуратно. Немного о Graphql 21
  20. - Свои велосипеды это интересно - Но до поры, до

    времени - Серебряной пули нет - gRPC хорош Выводы 22