Ab sgcWebSockets 2023.8.0 wird die CEX.IO-Plus-API unterstützt.
Unterstützte APIs
- WebSockets-API: Verbindet sich mit einem öffentlichen WebSocket-Server und liefert Echtzeit-Updates zu Marktdaten.
WebSockets-API
WebSocket ist ein TCP-basiertes Vollduplex-Kommunikationsprotokoll. Vollduplex bedeutet, dass beide Seiten einander asynchron über denselben Kanal Nachrichten senden können. Dieser Abschnitt beschreibt, welche Nachrichten Exchange Plus und Client austauschen sollten. Alle Nachrichten sollten gültige JSON-Objekte sein.
Die WebSocket-API wird vor allem genutzt, um Informationen zu erhalten oder Aktionen auszuführen, die über die REST-API nicht verfügbar oder umständlich sind. Einige Anfragen oder Aktionen sind allerdings sowohl per REST-API als auch per WebSocket-API möglich. Exchange Plus sendet dem Client Nachrichten als Antwort auf eine vorherige Anfrage oder als Benachrichtigung über ein Ereignis (ohne vorherige Anfrage des Clients).
Aufrufe der öffentlichen API
Für die öffentliche API gilt ein Rate-Limit, um das System vor DDoS-Angriffen zu schützen und allen Clients gleichmäßigen, stabilen Zugriff auf die Exchange-Plus-API-Endpunkte zu sichern. Öffentliche Anfragen werden je IP-Adresse begrenzt, von der die Anfragen ausgehen. Die Limits ergeben sich aus den Kosten je Aufruf. Standardmäßig kostet jede öffentliche Anfrage 1 Punkt; bei bestimmten Anfragen kann dieser Wert höher sein. Aktuelle Angaben zu den Punktkosten findest du in der Spezifikation der jeweiligen Methode.
Exchange Plus begrenzt öffentliche API-Aufrufe auf maximal 100 Punkte pro Minute, wobei jeder Aufruf seine eigenen Kosten hat (siehe unten). Wird das Limit erreicht, antwortet Exchange Plus mit einem Fehler, sendet dem Client ein Disconnected-Ereignis und schließt anschließend die WS-Verbindung. Ab der nächsten Kalenderminute bedient Exchange Plus den Client wieder. Im folgenden Beispiel wird der Zähler um 11:02:00.000 zurückgesetzt.
Beispiel: aktuellen Ticker des Paars BTC-USD abrufen
oClient := TsgcWebSocketClient.Create(nil);
oCexPlus := TsgcWSAPI_CexPlus.Create(nil);
oCexPlus.Client := oClient;
oCexPlus.OnCexPlusConnect := OnCexPlusConnectEvent;
oCexPlus.OnCexPlusMessage := OnCexPlusMessageEvent;
oClient.Active := True;
procedure OnCexPlusConnectEvent(Sender: TObject);
begin
oCexPlus.GetTicker('BTC-USD');
end;
procedure OnCexPlusMessageEvent(Sender: TObject; Event, Msg: string);
begin
ShowMessage('Ticker data: ' + Msg);
end;
Aufrufe der privaten API
Exchange Plus nutzt API-Schlüssel, um den Zugriff auf private APIs zu ermöglichen.
Der Client kann API-Schlüssel über das Exchange-Plus-Web-Terminal im Bereich „API-Keys-Management-Profil“ erzeugen, konfigurieren und verwalten, Berechtigungsstufen festlegen, IP-Whitelists pflegen usw.
API-Schlüssel-Limit: Standardmäßig kannst du bis zu 5 API-Schlüssel haben.
Um den Zugriff bei der Nutzung von API-Schlüsseln auf bestimmte Funktionen einzuschränken, solltest du je Schlüssel einen passenden Satz an Berechtigungen festlegen. Dieser kann bei Bedarf später angepasst werden.
Für API-Schlüssel stehen die folgenden Berechtigungsstufen zur Verfügung:
- Read: Berechtigungsstufe zum Einsehen kontobezogener Daten, zum Empfang von Berichten, zum Abonnieren von Marktdaten usw.
- Trade: Berechtigungsstufe, mit der im Namen des Kontos Orders platziert und storniert werden können.
- Funds Internal: Berechtigungsstufe, mit der Mittel zwischen Konten verschoben werden können (zwischen Subaccounts oder zwischen Hauptkonto und Subaccounts) des CEX.IO Exchange Plus Portfolios.
- Funds Wallet: Berechtigungsstufe, mit der Mittel zwischen Konten des CEX.IO Exchange Plus Portfolios (Hauptkonto und Subaccounts) und der CEX.IO Wallet hin- und hertransferiert werden können.
Beispiel: die Orders abrufen.
oClient := TsgcWebSocketClient.Create(nil);
oCexPlus := TsgcWSAPI_CexPlus.Create(nil);
oCexPlus.Client := oClient;
oCexPlus.CexPlus.ApiKey := 'your-api-key';
oCexPlus.CexPlus.ApiSecret := 'your-api-secret';
oCexPlus.OnCexPlusAuthenticated := OnCexPlusAuthenticatedEvent;
oCexPlus.OnCexPlusMessage := OnCexPlusMessageEvent;
oClient.Active := True;
procedure OnCexPlusAuthenticatedEvent(Sender: TObject);
begin
oCexPlus.GetOrders();
end;
procedure OnCexPlusMessageEvent(Sender: TObject; Event, Msg: string);
begin
ShowMessage('Orders: ' + Msg);
end;
