WebSocket, TCP tabanlı bir tam çift yönlü iletişim protokolüdür. Tam çift yönlü, her iki tarafın da aynı iletişim kanalını kullanarak birbirine eşzamansız olarak mesaj gönderebileceği anlamına gelir. Bu bölüm, Exchange Plus ve İstemcinin birbirine hangi mesajları göndermesi gerektiğini açıklar. Tüm mesajlar geçerli JSON nesneleri olmalıdır.
WebSocket API çoğunlukla REST API kullanılarak edinilemeyen veya yapılması kolay olmayan bilgileri elde etmek veya eylemleri gerçekleştirmek için kullanılır. Ancak, bazı istekler veya eylemler hem REST API hem de WebSocket API'sinde yapılabilir. Exchange Plus, daha önce İstemci tarafından gönderilen bir isteğe yanıt olarak veya bir olay hakkında bir bildirim olarak (önceki İstemci isteği olmadan) İstemciye mesaj gönderir.
Public API Calls
Genel API oran sınırı, sistemi DDoS saldırılarından korumak ve tüm İstemcilerin Exchange Plus API uç noktalarına aynı düzeyde kararlı erişime sahip olmasını sağlamak için ima edilmiştir. Genel istekler, genel API isteklerinin yapıldığı IP adresine göre sınırlandırılır. İstek sınırları, her genel API çağrısıyla ilişkili maliyetten belirlenir. Varsayılan olarak, her genel isteğin 1 puanlık bir maliyeti vardır, ancak bazı belirli istekler için bu maliyet daha yüksek olabilir. Her yöntemin spesifikasyonundaki güncel istek oran sınırı maliyet bilgilerine bakın.
Exchange Plus, her Public API çağrısının kendi maliyeti olduğunu (aşağıya bakın) dikkate alarak Public API çağrılarını dakikada maksimum 100 puanla sınırlar. İstek hız sınırına ulaşılırsa, Exchange Plus bir hatayla yanıt verir, İstemciye bağlantısı kesildi olayı gönderir ve ardından WS bağlantısını kapatır. Exchange Plus, bir sonraki takvim dakikasından itibaren İstemciye hizmet vermeye devam eder. Aşağıdaki örnekte, istek sayacı 11:02:00.000'de sıfırlanır.
| Yöntem | Açıklama |
| GetTicker | Bu yöntem, belirli varlıkların geçerli fiyatları, 24s fiyat & hacim değişiklikleri, son işlem olayı vb. dahil olmak üzere Ticker hakkında güncel bilgi edinmek için tasarlanmıştır. |
| GetOrderBook | Bu yöntem, İstemcinin belirli bir işlem çifti için mevcut emir defteri anlık görüntüsünü almasına olanak tanır. |
| GetCandles | Candles yöntemini kullanarak İstemci, farklı çözünürlüklerde ve veri türlerinde geçmiş OHLCV mumlarını alabilir. İstemci, yanıtı İstemcinin gereksinimlerine göre daha hassas hale getirmek için ek zaman dilimi ve limit filtreleri belirtebilir. |
| GetTradeHistory | Bu yöntem, İstemcinin istenen işlem çiftinde gerçekleşen işlemler hakkında geçmiş verileri almasını sağlar. İstemci, Trade History isteğini, istek parametreleriyle eşleşen işlemleri almak için zaman dilimi periyodu, tradeIds aralığı, side gibi ek filtre parametreleriyle tamamlayabilir. |
| GetServerTime | Bu yöntem, Exchange Plus sunucusundaki geçerli zamanı almak için kullanılır. Sunucunun zamanıyla senkronize edilmesi gereken uygulamalar için yararlı olabilir. |
| GetPairsInfo | Pair Info yöntemi, İstemcinin desteklenen tüm ticaret çiftleri için parametreleri almasını sağlar. |
| GetCurrenciesInfo | Currencies Info yöntemi, İstemcinin Exchange Plus'ta yapılandırılmış tüm para birimleri için parametreleri ve ayrıca Exchange Plus ile CEX.IO Wallet arasındaki yatırma ve çekme kullanılabilirliğini almasına olanak tanır. |
| GetProcessingInfo | Bu istek, İstemcinin desteklenen her kripto para birimine ilişkin, kripto para birimi adı ve para yatırma\çekme için mevcut blok zincirleri dahil olmak üzere, harici cüzdanlardan para yatırma ve harici cüzdanlara para çekme için mevcut seçenekler hakkında ayrıntılı bilgi almasına olanak tanır. Ayrıca, desteklenen her blok zinciri için, belirtilen blok zincirindeki kripto para türü, mevcut para yatırma\çekme kullanılabilirliği, para yatırma\çekme için minimum tutarlar, harici çekim ücretleri belirtilir. Bilgileri İşlemek, İstemciyi Para yatırma adresi almak ve belirli bir blok zinciri aracılığıyla harici çekimler başlatmak için istenen blok zincirini seçerken daha esnek hale getirir, böylece İstemci kripto varlıklarını CEX.IO Ekosistemine veya ondan aktarmanın daha uygun bir yolunu kullanır. |
| SubscribeOrderBook | İstemci WebSocket aracılığıyla abone olarak, istenen işlem çiftine ilişkin emir defteri akışına abone olabilir. Order Book Subscribe isteğine yanıt olarak İstemci, belirtilen seqId numarasıyla istenen çift için mevcut (başlangıç) emir defteri anlık görüntüsünü alır. Emir Defterine sonraki güncellemeleri izlemek için İstemcinin, işlem çifti adını, seqId numarasını, Bids ve Asks fiyat seviyesi deltalarını içerecek olan "order_book_increment" mesajlarına WebSocket aracılığıyla abone olması gerekir. |
| UnSubscribeOrderBook | Emir defteri kanalından aboneliği iptal edin. |
| SubscribeTrade | Trade Subscribe yöntemini kullanarak İstemci, WebSocket aracılığıyla istenen işlem çiftinde gerçekleşen işlem olaylarının canlı akışına abone olabilir. Trade Subscribe isteğine yanıt olarak İstemci, işlem aboneliği artık İstemci için gerekli olmadığında abonelikten çıkmak için daha sonra kullanılması gereken benzersiz bir işlem aboneliği tanımlayıcısı alır. İstemci, istenen işlem çifti için başlangıç ve periyodik İşlem Geçmişi anlık görüntülerini ve canlı işlem olaylarını almak için WebSocket aracılığıyla "tradeHistorySnapshot" ve "tradeUpdate" mesajlarına abone olmalıdır. |
| UnSubscribeTrade | İşlem kanalından aboneliği kaldırın. |
Örnek: BTC-USD çiftinin en son ticker'ını alın
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;
Private API Calls
Exchange Plus, Private API'lere erişime izin vermek için API anahtarları kullanır.
İstemci, Exchange Plus Web Terminal'in API Keys Management Profile bölümü aracılığıyla api anahtarları oluşturabilir, yapılandırabilir ve yönetebilir, izin düzeyleri ayarlayabilir, API anahtarı için izin listesine alınmış IP'ler belirleyebilir vb.
API Anahtarları sınırı: Varsayılan olarak İstemci en fazla 5 API Anahtarına sahip olabilir.
API Anahtarları kullanılırken belirli işlevselliğe erişimi kısıtlamak için her API Anahtarı için belirli bir izin kümesi tanımlanmalıdır. Tanımlanan izin kümesi gerekirse daha sonra düzenlenebilir.
API Anahtarları için aşağıdaki izin düzeyleri kullanılabilir:
| Yöntem | Açıklama |
| GetCurrentFee | Bu yöntem, İstemcinin güncel 30 günlük hacmini ve haftanın gününü dikkate alarak belirli bir anda mevcut ücretleri gösterir (örneğin hafta sonları ücretler farklı olabilir). |
| GetFeeStrategy | Fee Strategy, İstemcinin işlem hacmini, haftanın gününü, çiftleri, çift grubunu vb. dikkate alarak İstemci için uygulanabilecek tüm ücret seçeneklerini döndürür. Bu yöntem, İstemci için uygulanabilecek tüm olası işlem ücreti değerlerini içeren genel ücret stratejisi hakkında bilgi sağlar. İstemcinin mevcut 30 günlük işlem hacmine göre geçerli işlem ücretlerini almak için İstemci [Current Fee] yöntemini kullanmalıdır. Geçerli 30 günlük işlem hacmini almak için İstemci [Volume] yöntemini kullanmalıdır. |
| GetVolume | Bu istek, İstemcinin son 30 gün için USD eşdeğeri işlem hacmini almasına olanak tanır. |
| CreateAccount | Bu istek, İstemcinin yeni bir alt hesap (sub-account) oluşturmasına olanak tanır. Varsayılan olarak İstemci, ana hesap dahil en fazla 5 alt hesaba sahip olabilir. |
| GetAccountStatus | Account Status V3 yöntemini kullanarak, İstemci mevcut bakiyesini ve dönüştürülen para birimindeki (varsayılan olarak "USD") gösterge eşdeğerini, her bir alt hesaba ve para birimine göre açık (etkin) emirlerde kilitli tutarları öğrenebilir. İstemci için ticaret ücreti bakiyesi mevcutsa, yanıt ayrıca promosyon adı, para birimi adı, toplam bakiye ve bu promosyonun son kullanma tarihi gibi genel ticaret ücreti bakiyesi verilerini de Trading Fee Balance üzerinde içerir. Alt hesabındaki açık (etkin) emirlerde kilitli bakiye tutarıyla azaltılmış mevcut alt hesap bakiyesi olarak, alt hesaplarının mevcut ticaret bakiyesini izlemek İstemcinin sorumluluğundadır. |
| GetOrders | Bu istek, İstemcinin siparişleri hakkında bilgi edinmesine olanak tanır. |
| NewOrder | İstemci, Do My New Order Request kullanarak WebSocket API aracılığıyla yeni emirler verebilir. Bu isteğe verilen yanıtla birlikte, istek başarılıysa Exchange Plus, İstemciye Account Event ve Execution Report mesajları gönderir. Yanıt mesajı, yanıtın gönderildiği anda sistemde mevcut olan emrin en son güncel durumunu gösterir. İstemci, Do My New Order Request'e bir Yanıt mesajı almadıysa, İstemci, clientOrderId parametresiyle Get My Orders Request kullanarak emrin geçerli durumunu sorgulayabilir. Yeni emir için bir istek gönderirken, istemci tarafındaki belirli yeni emir isteğine karşılık gelen clientOrderId parametresinin kullanılması şiddetle önerilir. Exchange Plus, aynı clientOrderId ile birden fazla emir verilmesini önler. Aynı clientOrderId ve diğer aynı emir parametrelerine sahip birden fazla yeni emir tanımlanırsa, Exchange Plus yalnızca ilk emri verir ve böyle bir emrin durumunu, aynı parametrelere sahip ikinci ve sonraki yeni emir isteklerine yanıt olarak İstemciye döndürür. Aynı clientOrderId ancak farklı diğer emir parametrelerine sahip birden fazla yeni emir tanımlanırsa, Exchange Plus yalnızca ilk emri işler ve aynı clientOrderID ancak farklı diğer emir parametrelerine sahip ikinci ve sonraki yeni emir isteklerini reddeder. |
| NewMarketOrder | Yeni bir market order verir. |
| NewLimitOrder | Yeni bir limit emir verir. |
| CancelOrder | İstemci emirleri iptal edebilir. Bu isteğe verilen yanıtla birlikte, bu istek başarılı olursa Exchange Plus, İstemciye Account Event ve Execution Report mesajları gönderir. Ayrıca, bir emri iptal etme isteği reddedilirse, Exchange Plus bir Order Cancellation Rejection mesajı gönderir. |
| CancelAllOrders | İstemci, tüm açık emirleri WebSocket API aracılığıyla iptal edebilir. Bu isteğe verilen yanıtla birlikte Exchange Plus, tüm açık emirler için iptal sürecini başlatır ve İstemciye ilgili Account Event ve Execution Report mesajlarını gönderir. |
| GetTransactionHistory | Bu istek, İstemcinin finansal işlemlerini (para yatırma, çekme, dahili transferler, komisyonlar veya işlemler) öğrenmesine olanak tanır. |
| GetFundingHistory | Bu istek, İstemcinin para yatırma ve çekme işlemlerini bulmasına olanak tanır. |
| InternalTransfer | İstemci, alt hesapları arasında veya ana hesabı ile alt hesabı arasında para transferi yapmak isteyebilir. Exchange Plus, İstemciden hesapları arasında para transferi için herhangi bir komisyon almaz. Bu isteğe verilen yanıtla birlikte, bu istek başarılı olursa Exchange Plus, İstemciye Account Event mesajları gönderir. |
| GetDepositAddress | Bu yöntem, İstemci tarafından kripto para yatırmak için bir kripto adresi almak üzere kullanılabilir. Yatırma adresi ana ve alt hesaplar için oluşturulabilir. Yatırma adresi oluşturmak için kullanılabilir blockchain listesi, İstemci tarafından Get Processing Info isteği aracılığıyla alınabilir. |
| FundsDepositFromWallet | İstemci, CEX.IO Cüzdanından Exchange Plus hesabına para yatırabilir. Sistem, aynı clientTxId ile birden fazla para yatırma isteğinin işlenmesini önler. Aynı clientTxId ile birden fazla para yatırma isteği alınırsa, sistem yalnızca ilk para yatırma isteğini işler ve aynı clientTxId'ye sahip ikinci ve sonraki para yatırma isteklerini reddeder. |
| FundsWithdrawalToWallet | İstemci, Exchange Plus hesabından CEX.IO Wallet'a fon çekebilir. Sistem, aynı clientTxId ile birden çok çekme isteğini önler. Aynı clientTxId'ye sahip birden çok çekme isteği alınırsa, sistem yalnızca ilk çekme isteğini işler ve aynı clientTxId'ye sahip ikinci ve sonraki çekme isteklerini reddeder. |
| GetWalletBalance | CEX.IO Wallet bakiye bilgilerini alır. |
| SubscribeAccountEvents | Gerçek zamanlı hesap olayı bildirimlerine abone olur (bakiye değişiklikleri, emir gerçekleşmeleri). |
| UnSubscribeAccountEvents | Hesap olay bildirimlerinin aboneliğini kaldırır. |
Örnek: emirleri alın.
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;