+++
title = "Plugin протокол"
keywords = ["harvest", "plugins", "backend", "plugin", "backend-plugins", "documentation"]
+++

# Протокол плагина

Существует физический проводной протокол, который сервер Harvest использует для связи с внутренними плагинами. Это контракт между Harvest и серверными плагинами, который должен быть согласован для того, чтобы Harvest и серверный плагин могли взаимодействовать друг с другом. Протокол плагина построен на [gRPC](https://grpc.io /) и определяется в [Буферы протокола (также известные как protobuf)](https://developers.google.com/protocol-buffers ).

Мы рекомендуем, чтобы внутренние плагины не были реализованы непосредственно против этого протокола. Вместо этого предпочитайте использовать [Harvest Plugin SDK для Go]({{< relref "harvest-plugin-sdk-for-go.md " >}}), который реализует этот протокол и предоставляет API более высокого уровня.

Протокол плагина доступен в [репозитории GitHub](https://github.com/harvest/harvest-plugin-sdk-go/blob/master/proto/backend.proto ). Протокол плагина находится в [Harvest Plugin SDK для Go]({{< relref "harvest-plugin-sdk-for-go.md " >}}), поскольку сама Harvest использует части SDK в качестве зависимости.

## Управление версиями

Ожидается, что в последней версии протокола плагина будут добавлены сервисы, сообщения и поля, но они не должны вносить никаких существенных изменений. Если необходимы кардинальные изменения в протоколе плагина, будет создана и выпущена новая основная версия протокола плагина вместе с новым основным выпуском Harvest. Затем Harvest будет поддерживать как старый, так и новый протокол плагинов в течение некоторого времени, чтобы убедиться, что существующие внутренние плагины продолжают работать.

Поскольку Harvest поддерживает протокол плагина, протокол плагина пытается следовать версиям Harvest, однако это не означает автоматически, что новая основная версия протокола плагина создается при выпуске новой основной версии Harvest.

## Написание плагинов без Go

Если вы хотите написать серверный плагин на другом языке, кроме Go, то это возможно, если язык поддерживает [gRPC](https://grpc.io /). Однако рекомендуется написать плагин в Go, который имеет несколько преимуществ, которые следует тщательно учитывать, прежде чем продолжить:
- Есть официальный [SDK]({{< relref "harvest-plugin-sdk-for-go.md " >}}) доступно.
- Одиночный двоичный файл в качестве скомпилированного выходного файла.
- Создание и компиляция для нескольких платформ очень просты.
- Статически скомпилированный двоичный файл (в большинстве случаев) не требует каких-либо дополнительных зависимостей, установленных на целевой платформе, что позволяет ему работать “везде”.
- Небольшая площадь с точки зрения двоичного размера и использования ресурсов.