OpenAPI SDK Π΄Π»Ρ Java
Π ΠΠΠΠΠΠ’ΠΠ ΠΠ ΠΠΠΠΠ ΠΠΠΠ! Π ΡΠ²ΡΠ·ΠΈ Ρ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ API, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΠΉ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠΉ SDK, Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ. ΠΠ»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ API ΡΠΎΠ·Π΄Π°Π½ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Java Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ OpenAPI Π’ΠΈΠ½ΡΠΊΠΎΡΡ ΠΠ½Π²Π΅ΡΡΠΈΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠ³ΠΎΠ²ΡΡ ΡΠΎΠ±ΠΎΡΠΎΠ².
ΠΠ°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ
ΠΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Apache Maven Π²Π΅ΡΡΠΈΠΈ Π½Π΅ Π½ΠΈΠΆΠ΅ 3, Π° ΡΠ°ΠΊΠΆΠ΅ JDK Π²Π΅ΡΡΠΈΠΈ Π½Π΅ Π½ΠΈΠΆΠ΅ 8. ΠΠ°ΡΠ΅ΠΌ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
mvn clean package
ΠΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ docker
# Linux/Mac Π²Π΅ΡΡΠΈΡ
docker run -it --rm --name invest-openapi-java-sdk -v "$PWD":/usr/src/invest-openapi-java-sdk -w /usr/src/invest-openapi-java-sdk maven:3.6-jdk-11-slim mvn clean package
# Windows PowerShell Π²Π΅ΡΡΠΈΡ
docker run -it --rm --name invest-openapi-java-sdk -v "$(pwd):/usr/src/invest-openapi-java-sdk".ToLower() -w /usr/src/invest-openapi-java-sdk maven:3.6-jdk-11-slim mvn clean package
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ example - ΠΎΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ JDK Π²Π΅ΡΡΠΈΠΈ 11. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ°ΠΌ SDK Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ.
ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ Π² ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ sdk-java8\target
ΠΏΠΎΡΠ²ΠΈΡΡΡ jar-ΡΠ°ΠΉΠ» openapi-java-sdk-java8-<version>
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊ Π»ΡΠ±ΠΎΠΌΡ
Π΄ΡΡΠ³ΠΎΠΌΡ Java-ΠΏΡΠΎΠ΅ΠΊΡΡ (ΠΈΠ»ΠΈ Java-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΡΠ°ΠΊΠΈΡ
ΡΠ·ΡΠΊΠ°Ρ
, ΠΊΠ°ΠΊ Kotlin ΠΈ Scala).
ΠΠ΄Π΅ Π²Π·ΡΡΡ ΡΠΎΠΊΠ΅Π½ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ?
Π ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΉ Π²Π°ΡΠ΅Π³ΠΎ Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π±ΠΈΠ½Π΅ΡΠ° tinkoff. ΠΠ°Π»Π΅Π΅:
- ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ "ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΠΎΠΊ ΠΊΠΎΠ΄ΠΎΠΌ" ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π°
- ΠΡΠΏΡΡΡΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ ΡΠΎΡΠ³ΠΎΠ²Π»ΠΈ Π½Π° Π±ΠΈΡΠΆΠ΅ ΠΈ ΡΠ΅ΠΆΠΈΠΌΠ° "ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΡ" (sandbox)
- Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΠΎΠΊΠ΅Π½ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅, ΡΠΎΠΊΠ΅Π½ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΡΡΠΊΠ°ΡΡ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΊΠ΅Π½ΠΎΠ²
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
ΠΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ javadoc-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
mvn javadoc:javadoc
ΠΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ docker
# Linux/Mac Π²Π΅ΡΡΠΈΡ
docker run -it --rm --name invest-openapi-java-sdk -v "$PWD":/usr/src/invest-openapi-java-sdk -w /usr/src/invest-openapi-java-sdk maven:3.6-jdk-11-slim mvn javadoc:javadoc
ΠΡΠΎΠ΅ΠΊΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ Π½Π° 3 ΡΠ°ΡΡΠΈ:
- core - ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π²ΡΠ΅Ρ ΡΠ°ΡΡΠ΅ΠΉ REST API ΠΈ Streaming API, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ;
- sdk-java8 - ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ core-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ http-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ OkHttp;
- example - ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ core-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π² sdk-java8 (Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ jdk11).
ΠΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ core-ΡΠ°ΡΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ JSON ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Jackson Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎ OpenAPI ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅.
ΠΠ°ΠΆΠ΄Π°Ρ ΡΠ°ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
<dependency>
<groupId>ru.tinkoff.invest</groupId>
<artifactId>openapi-java-sdk-core</artifactId>
<!-- <artifactId>openapi-java-sdk-java8</artifactId>-->
<!-- <artifactId>openapi-java-sdk-example</artifactId>-->
<version>0.4.1</version>
</dependency>
Π Π΅ΡΠ»ΠΈ Π²ΠΊΡΠ°ΡΡΠ΅?
ΠΠ»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ OpenAPI Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
import org.reactivestreams.Subscriber;
import ru.tinkoff.invest.openapi.OpenApi;
import ru.tinkoff.invest.openapi.okhttp.OkHttpOpenApi;
import ru.tinkoff.invest.openapi.model.rest.*;
import ru.tinkoff.invest.openapi.model.streaming.*;
import java.util.concurrent.Executors;
class Example {
public static void main(String[] args) {
String token = "super_token"; // ΡΠΎΠΊΠ΅Π½ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
boolean sandboxMode = true;
OpenApi api = new OkHttpOpenApi(token, sandboxMode);
if (api.isSandboxMode()) {
api.getSandboxContext().performRegistration(new SandboxRegisterRequest()).join();
}
Subscriber<StreamingEvent> listener = new Subscriber() { /* Π²Π°Ρ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ»ΡΡΠ°ΡΠ΅Π»Ρ */ };
api.getStreamingContext().subscribe(listener);
// ΠΎΡΠΎΡΠΌΠ»ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π° ΠΏΠΎΡΠΎΠΊ "ΡΠ²Π΅ΡΠ΅ΠΉ"
api.getStreamingContext().sendRequest(StreamingRequest.subscribeCandle("<ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ figi>", CandleInterval.FIVE_MIN));
// ΠΡΡ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½Ρ
Portfolio portfolio = api.getPortfolioContext.getPortfolio().join(); // ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΡΡΡΠ΅Π»Ρ
}
}
Π ΠΏΡΠΈΠΌΠ΅Ρ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠ±ΠΎΡΠ° Π΅ΡΡΡ?
ΠΡΠΈΠΌΠ΅Ρ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠ±ΠΎΡΠ° ΠΏΠΎΠΊΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ.
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡ
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ - Π² Π½Π΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ Π²ΠΎΠΏΡΠΎΡ Π² Issues ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅Π»ΠΈΠ·Π°Ρ Π² Releases.
ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡ SDK, Π½Π°ΡΡΠ»ΡΡ Π±Π°Π³ ΠΈΠ»ΠΈ Π΅ΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π΅Π³ΠΎ Π² Issues.