Tinkoff / investAPI

395 stars 136 forks source link

Использование встроенного в продукты Intellij gRPC-клиента #4

Open tumb1er opened 2 years ago

tumb1er commented 2 years ago

Добрый день.

Не знаю, достойно ли это упоминания в документации, но мне удалось подтвердить работоспособность запросов в Intellij GoLand 2021.3.1

Для начала, плагин GRPC еще в зачаточном состоянии, поэтому много еще не работает. Например, он не осилил включить TLS и прокинуть заголовок Authorization. Поэтому настраиваем nginx примерно с таким конфигом:

server {
    listen 9000 http2;
    location / {
        # подстилка под Intellij gRPC plugin, который не пробрасывает заголовки
        grpc_set_header Authorization "Bearer t.myLongTokenValue";
        # подстилка под Intellij gRPC  plugin, который не включает TLS
        grpc_pass grpcs://invest-public-api.tinkoff.ru:443;
    }
}
  1. Загружаем proto-файлы в любую директорию проекта
  2. В Settings - Languages & Frameworks - Protocol Buffers вручную добавляем путь до этой директории, чтобы IDE увидело proto-файлы
  3. Открываем proto-файл, напротив rpc вызовов будет иконка "Generate request in HTTP Client"
  4. При клике откроется редактор файла "generated-requests.http" где-то в недрах директорий IDE, где из-за многочисленных недоработок плагина GRPC надо указать в качестве хоста адрес локального nginx (localhost:9000).

В итоге, получаем рабочие "простые" запросы:

localhost:9000/tinkoff.public.invest.api.contract.v1.UsersService/GetInfo

{
  "qualifiedForWorkWith": [
    "bond",
    "foreign_etf",
    "foreign_shares"
  ]
}

Response file saved.
> 2021-12-30T120506.OK.json
betslus1 commented 2 years ago

Интересное решение, в т.ч. Для легирования и балансировки, может кому то и пригодится.

Единственное, что если кто-то будет копировать это в продакшен, не забывайте ограничить доступ к nginx из вне. Иначе каждый сможет слать ваши запросы.

tumb1er commented 2 years ago

Главное, не прописывать в конфиге nginx токен "на проде". Да и вообще.