Public Socket
Custody public socket documentation.
| Environment | Socket Base URL |
|---|---|
| Test | wss://testream.crypto-asset-custody.com/ws/public |
| Production | wss://stream.crypto-asset-custody.com/ws/public |
Genel
Soket içindeki veri akışını kontrol etmemizi sağlayan yollar bir ağaç gibi dallanıyor. Verinin işlenme biçimine göre stream ismini verdiğimiz ana kollara ayırlırken her bir stream kendi içinde channel ismini verdiğimiz alt kollara ayrılıyor. Bunları başlık ve alt başlıklar gibi düşünebilirsiniz.
Streams and channels
Desteklenen stream tipleri aşağıdaki gibidir.
priceplatform_info
price stream'i altında all channel'ı bulunmakta. Herhangi bir pair'in fiyatında güncelleme olduğunda burada yayınlanıyor.
Client mesajları
Server, client'tan gelen mesajlarda beklediği 3 zorunlu alan(op, args, id) bulunuyor.
-
opString. Client'ın yürütmek istediği komut gibi düşünülebilir. Public sokette
opalanı içinsubveunsubdeğerleri destekleniyor. -
argsArray.
argadını verdiğimiz JSON objelerinden oluşmalı. Ve her bir argstream,channel,throttlealanlarını barındırabilir.throttlemesajların geliş sıklığını ayarlamada kullanılan bir parametre, birimi ms ve tipi integer olmalı.Örnek
arg:{
"stream": "price",
"channel": "all",
"throttle": 1000,
"params": {
"auto_unsub": true,
"format": 2
}
}Alanlara gelmesi gereken veri tipleri ve bu alanların gereklilikleri aşağıdaki tabloda verilmiştir.
Field Data type Required stream stringtrue channel stringtrue throttle integertrue params jsonfalse Parametre işlevleri aşağıdaki tabloda verilmiştir.
Parameter Data type Default Description auto_unsubbooleanfalse True ise, stream'e gönderilen bir sonraki sub mesajı şu anki mesaj içindeki stream özelinde tüm channel'lardan unsub olunmasını sağlar. -
idInteger. Değerini client'ların belirlediği custom bir alan. Client'tan gönderilen her bir mesaja server cevap niteliğinde olan bir mesaj yolluyor. Hangi cevabın hangi mesajdan kaynaklandığını takip edebilmeniz eklenmiş bir alan.
Stream tiplerine göre desteklenen throttle değerleri ve parametre tipleri aşağıdaki gibidir.
| Stream | Throttles | Supported parameters |
|---|---|---|
price | [100, 500, 1000, 3000] | [] |
depth | [100, 500, 1000] | ["auto_unsub", "grouping"] |
trades | [100, 1000] | ["auto_unsub", "format"] |
platform_info | [1000] | [] |
Tam client mesaj örneği
{
"op": "sub",
"args": [
{
"stream": "depth",
"channel": "btcusdt",
"throttle": 1000,
"params": {
"grouping": 0
}
}
],
"id": 2
}
Server mesajları
Server'dan gelebilecek 3 tip mesaj bulunuyor.
- Success
- Error
- Data
Success ve error mesajları client tarafından verilen bir komutun server içindeki işlenmesinin sonucunu client'a aktarmakta. Geliştirme yaparken işinize yarayabilir. Kod akışı açısından değerlendirdiğinde yalnızca data mesajları dikkate alınmalı.
Mesajların tipini ayırt etmek için e(event) alanını kullanmalısınız. Success ve error mesajları ayrıntıları barındıran i alanını içermektedir.
Success
Hangi stream'de hangi channel'lara sub olunduğu success mesajı içinde client'a bildirilir.
Örnek:
{
"e": "sub",
"i": {
"code": 0,
"stream": "price",
"throttle": 1000,
"channels": [
"all"
]
},
"id": 4
}
Error
indexes alanı client'tan gönderilen args array içinde hangi index'teki objelerde hata olduğunu belirtiyor.
Örnek:
{
"e": "error",
"i": {
"code": "-10002",
"message": "Invalid stream.",
"help": "Valid stream options are [\"price\"].",
"indexes": [
0
]
},
"id": 4
}
Data mesajları
Her bir data mesajı, mesajın hangi kaynaktan geldiğinin ayrıştırılmasını sağlayan st (stream), ch (channel), th (throttle) alanları bulundurmaktadır. İşlenmesi gereken veri ise data alanında bulunmaktadır. data alanı JSON objeleri içerir ve array tipindedir.
Her başarılı subscription sonrasında subscription'ı yapan client'a özel olarak bir data snapshot mesajı gönderilir. Mesajın snapshot olduğunu data mesajındaki snapshot alanında true değeri bulunur. Snapshot olmayan data mesajlarında snapshot alanı bulunmaz. Snapshot mesaj içerikleri aşağıdaki gibidir.
| Stream | Channel | Snapshot içeriği |
|---|---|---|
price | btcusdt | btcusdt son price bilgisi |
price | all | tüm currency'lerdeki son fiyat bilgisi |
platform_info | public_params | public parameters |
platform_info | currencies | aktif currency bilgileri |
platform_info | networks | aktif currency-network ikilileri |
platform_info | announcements | aktif duyurular |
platform_info | all | Ayrı ayrı sub olmuş gibi tüm channel'ların snapshot mesajları aktarılır |
Platform info mesajları
platform_info stream'deki snapshot ve canlı mesajları veri açısından aynı içeriğe sahiptir. Her bir canlı mesaj sadece güncellenen değil tüm veriyi içerir.
-
Public params mesajları
{
"e": "data",
"st": "platform_info",
"th": 1000,
"ch": "public_params",
"snapshot": true,
"data": [
{
"ts": 1722536103724,
"data": [
{
"TIPS": {
"tips": [
{
"messageNo": 1,
"message": "Ana Sayfa'daki kayan resimlerin her birine tıklayarak detaylarını keşfedebilirsiniz.",
"iosScreenshotUrl": "https://cdn.crypto-asset-custody.com/images/mobil/1.png",
"iosVideoUrl": "",
"androidScreenshotUrl": "https://cdn.crypto-asset-custody.com/images/mobil/1.png",
"androidVideoUrl": "",
"webScreenshotUrl": "",
"webVideoUrl": ""
},
...
]
},
...
}
]
}
]
} -
Currencies mesajları
{
"e": "data",
"st": "platform_info",
"th": 1000,
"ch": "currencies",
"snapshot": true,
"data": [
{
"ts": 1722536103724,
"data": [
{
"code": "ORDI",
"name": "ORDI",
"imageUrl": "https://cdn.example.com/images/pairs/ORDI/ORDI.svg",
"pngImageUrl": "https://cdn.example.com/images/pairs/ORDI/ORDI@2x.png",
"formatPrecision": "%,.0f"
},
{
"code": "NOHUT",
"name": "Nohut Token",
"imageUrl": "https://cdn.example.com/images/pairs/NOHUT/NOHUT.svg",
"pngImageUrl": "https://cdn.example.com/images/pairs/NOHUT/NOHUT@2x.png",
"formatPrecision": "%,.0f"
},
...
]
}
]
} -
Networks mesajları
{
"e": "data",
"st": "platform_info",
"th": 1000,
"ch": "networks",
"snapshot": true,
"data": [
{
"ts": 1722584411987,
"data": [
{
"code": "GEN",
"network": "SOL",
"networkName": "Solana",
"withdrawMin": 50,
"withdrawMax": 10000000000,
"baseWithdrawFee": 1,
"addressRegex": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
"memoRegex": "",
"depositDesc": null,
"withdrawDesc": null,
"specialTips": null,
"specialWithdrawTips": null,
"depositEnable": true,
"withdrawEnable": true,
"minConfirm": null,
"hasMemoAddress": false
},
...
]
}
]
} -
Announcements mesajları
{
"e": "data",
"st": "platform_info",
"th": 1000,
"ch": "announcements",
"snapshot": true,
"data": [
{
"ts": 1722584411987,
"data": [
{
"id": "697",
"startDate": 1722459600650,
"endDate": 1754081940000,
"title": "Android Cihazlarda Kriptopara...",
"message": "Değerli Kullanıcılarımız,\n\nAndroid...",
"isActive": true,
"priority": 2,
"orderNo": 1,
"isExpanded": true,
"isPinned": false,
"showSlider": false,
"sliderImageUrl": null,
"webSliderImageUrl": null,
"iosSliderImageUrl": null,
"htmlContent": "",
"type": 0,
"routeContent": {
"targetAsset": null,
"collateralAsset": null,
"announcementHeader": null,
"announcementDetail": null,
"announcementId": null,
"competitionId": null,
"competitionSlug": null,
"preSaleSlug": null
},
"sliderClientType": null,
"showForDemoAccount": true,
"sliderClientTypeDesc": "All"
},
...
]
}
]
}
Price mesajları
{
"e": "data",
"st": "price",
"th": 1000,
"ch": "all",
"data": [
{
"timestamp": 1757925076146,
"symbol": "APTUSDT",
"price": 4.428,
"offers": {
"raw": {
"ask": 4.429,
"bid": 4.428
}
},
"route": [
"1-APTUSDT"
]
},
{
"timestamp": 1757925076201,
"symbol": "ARBUSDT",
"price": 0.4996,
"offers": {
"raw": {
"ask": 0.4997,
"bid": 0.4996
}
},
"route": [
"1-ARBUSDT"
]
},
...
]
}
Tavsiyeler
- Mobil için, sayfa değişimlerinde bağlantıyı koparmak yerine, verisine ihtiyaç kalmayan stream'lerden unsub yapılması performans açısından daha iyi olabilir. Bağlantının yeniden kurulması kullanıcı deneyimi açısından daha maliyetli olacaktır.
- Ping mesajları ile bağlantının açık kalması sağlanabilir.
pricestream'indeki veri akışı bir istisna olarak app genelinde kullanıcının yaptığı aksiyonlardan bağımsız olarak açık kalabilir ve buradan akan veriler global bir veri yapısında saklanabilir.