Как правильно сформировать запрос Тинькофф API gRPC?
Здравствуйте.
На примере TINKOFF INVEST API пытаюсь реализовать клиента gRPC, конкретно реализовать его метод Currencies сервиса InstrumentsService. Часть кода я написал, а дописать не как не получается:
using Grpc.Core; using Grpc.Net.Client; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Tinkoff.InvestApi.V1; namespace GrpcTest.Tinkoff.InvestApi.V1 { internal class Instruments { public async Task BondAsync() { Metadata metadata = new Metadata { { "Authorization", "Bearer {token}"} }; using var channel = GrpcChannel.ForAddress("https://invest-public-api.tinkoff.ru:443"); var client = new InstrumentsService.InstrumentsServiceClient(channel); var currencies = client.Currencies(new InstrumentsRequest(), metadata); foreach (var future in currencies.Instruments.Count()) { } } } } |
using Grpc.Core; using Grpc.Net.Client; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Tinkoff.InvestApi.V1; namespace GrpcTest.Tinkoff.InvestApi.V1 { internal class Instruments { public async Task BondAsync() { Metadata metadata = new Metadata { { "Authorization", "Bearer {token}"} }; using var channel = GrpcChannel.ForAddress("https://invest-public-api.tinkoff.ru:443"); var client = new InstrumentsService.InstrumentsServiceClient(channel); var currencies = client.Currencies(new InstrumentsRequest(), metadata); foreach (var future in currencies.Instruments.Count()) { } } } }
SDK у них без примеров, реализую без нее.
Помогите пожалуйста, подскажите куда копать, где что можно подглядеть.
В оф. документации запутался окончательно.
Спасибо.
Дополнительно:
1. Примеры есть, если напишешь issue, то пример новый добавят рано или поздно.
Для инструментов пример вот:
https://github.com/RussianInvestments/invest-api-c...
2. А что именно тебе нужно?
Вот например:
var settings = new Tinkoff.InvestApi.InvestApiSettings { AccessToken = "..." }; var client = Tinkoff.InvestApi.InvestApiClientFactory.Create(settings); var currencies = client.Instruments.Currencies(); foreach (var currency in currencies.Instruments) { Console.WriteLine( $"{currency.Uid} {currency.Ticker} {currency.Name} {currency.Nominal.Units + currency.Nominal.Nano / 1000000000m} {currency.Nominal.Currency}"); } |
var settings = new Tinkoff.InvestApi.InvestApiSettings { AccessToken = "..." }; var client = Tinkoff.InvestApi.InvestApiClientFactory.Create(settings); var currencies = client.Instruments.Currencies(); foreach (var currency in currencies.Instruments) { Console.WriteLine( $"{currency.Uid} {currency.Ticker} {currency.Name} {currency.Nominal.Units + currency.Nominal.Nano / 1000000000m} {currency.Nominal.Currency}"); }
PS: https://github.com/RussianInvestments/invest-api-c...
- Спасибо, все получилось. Не смог сходу в документации к SDK разобраться.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для правильного формирования запроса к API Tinkoff через gRPC, вам потребуется использовать спецификацию и документацию, предоставленные разработчиками Tinkoff.
Прежде всего, убедитесь, что у вас установлены все необходимые зависимости для работы с gRPC. Для работы с gRPC в PHP вам понадобится установить библиотеку grpc/php-grpc с помощью Composer.
Далее, вам необходимо создать клиент gRPC для взаимодействия с API Tinkoff. Вам понадобится файл протокола (protobuf), который описывает доступные методы API и структуры данных.
Пример запроса к API Tinkoff через gRPC может выглядеть следующим образом:
// Импортируем сгенерированный код gRPC require 'vendor/autoload.php'; require 'Tinkoff/Proto/Service/ServiceClient.php'; // Создаем клиент gRPC $client = new Tinkoff\Proto\Service\ServiceClient('localhost:50051', [ 'credentials' => Grpc\ChannelCredentials::createInsecure(), ]); // Формируем запрос $request = new Tinkoff\Proto\Request(); $request->setParam1('value1'); $request->setParam2('value2'); // Вызываем метод API list($response, $status) = $client->CallApiMethod($request)->wait(); if ($status->code !== Grpc\STATUS_OK) { echo 'Error: ' . $status->details . PHP_EOL; } else { echo 'Response: ' . $response->getResult() . PHP_EOL; }
Не забудьте заменить 'localhost:50051' на адрес и порт сервера Tinkoff API, а также подставить реальные значения параметров запроса.
Помните, что для успешного взаимодействия с API Tinkoff через gRPC вам также понадобится наличие корректных учетных данных (токенов, ключей доступа и т.д.), которые вы должны передавать в запросе в соответствии с требованиями документации Tinkoff.
Надеюсь, этот пример поможет вам правильно сформировать запрос к API Tinkoff через gRPC. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью!