gRPC
Часть аббревиатуры RPC расшифровывается как удаленный вызов процедур. g добавленное в начале означает, что это усовершенствованная версия, разработанная Google в 2015 году.
Пользователь выбирает удаленную процедуру для выполнения, сериализует необходимые параметры и добавляет любую необходимую информацию в сообщение. Затем это сообщение будет отправлено на сервер, который взаимодействует с приложением. Сообщение декодируется и выполняется соответствующая операция. Затем результат выполнения возвращается пользователю.
Плюсы
Это мощная форма API из-за своей простоты. Вы просто, используя GET для получения информации и POST для всего остального. Новые функции легко добавлять. При небольшом размере запросов и ответов вы получаете в целом очень хорошую производительность. Возможность определять любой тип функции делает ее неограниченно настраиваемой.
Типичные варианты использования включают API-интерфейсы, которые отправляют простые запросы в удаленные системы, и API-интерфейсы для конкретных клиентов, которые помогают масштабировать внутренние микросервисы с высокой скоростью.
- Поддерживается множеством популярных языков программирования, в том числе JavaScript, Java, C#, Kotlin, Python и Go.
- Открытый исходный код и разработчики могут модифицировать его под свои потребности.
- Способен балансировать нагрузку.
- По умолчанию использует HTTP/2, что уменьшает задержку по сравнению с REST API.
- Сериализует данные в двоичном формате.
Минусы
Недостаток gRPC заключается в том, что он тесно связан с базовой системой, что ограничивает возможность его повторного использования во многих случаях. Кроме того, между API и реальными системными функциями отсутствует уровень абстракции, что может вызывать проблемы с безопасностью.
- Не имеет поддержки браузера по умолчанию.
- Менее распространён, чем REST и GraphQL. Сообщество пользователей меньше по размеру.
WebSockets
WebSockets - это протокол связи, который обеспечивает динамическую связь по одному TCP-соединению.
Плюсы
WebSockets действует как тонкий транспортный слой, расположенный поверх вашего технологического стека TCP/IP. С помощью API вы можете отправлять сообщения на сервер и получать ответы, управляемые событиями, без необходимости опрашивать сервер для получения ответа.
- Поддерживает двусторонний обмен данными: может одновременно получать и передавать информацию.
- Отправляет данные быстрее, чем HTTP.
- Кроссплатформенная совместимость.
- Кратковременное отсутствие связи не прерывает соединение.
- Протокол позволяет работать в асинхронном режиме вместо привычной схему запросов и ответов.
Минусы
Основное различие между WebSocket API и gRPC API заключается в том, что WebSockets основан на HTTP/1.1, тогда как gRPC был создан с использованием HTTP/2. Это был естественный шаг к развитию технологии, хотя это не значит, что какой-то из них лучше. У обоих вариантов есть свои плюсы и минусы, и ваш конкретный выбор должен соответствовать вашим потребностям.
- Высокие требования к серверному оборудованию.
- При отправке пакета в WebSocket вы не сразу узнаете доставлен он или нет.
Как вы можете видеть, наилучшего типа API не существует. У каждого есть свои плюсы и минусы, и они подходят для конкретных случаев. В нашем распоряжении много отличных вариантов и основная задача заключается в том, чтобы найти подходящий для целей, которых мы пытаемся достичь.
Для принятия решения вам необходимо учитывать несколько вещей:
- Какой язык программирования вы хотите использовать?
- В какой среде вы собираетесь разрабатывать?
- Какова основная функциональность, которая важна для этого API?
- Какими навыками вы уже владеете или можете приобрести?
Если вы можете ответить на эти вопросы заранее - это поможет выбрать тип API, наиболее подходящий для ваших нужд. Имейте в виду, что вы всегда можете попробовать небольшое подтверждение концепции с одним или двумя типами, чтобы посмотреть, как они будут функционировать.