Mesajları serileştirme ve seri durumdan çıkarma¶
cTrader arka ucuna gönderilen ve oradan alınan mesajları serileştirmek ve seri durumdan çıkarmak için Protocol Buffers (Protobuf'lar) veya JSON (JavaScript Nesne Gösterimi) kullanabilirsiniz.
Protobuf'lar ve JSON
Aşağıdaki durumlarda JSON kullanmayı düşünebilirsiniz:
- Entegrasyonu mümkün olduğunca basitleştirmek istiyorsanız. JSON kullanımı kolaydır ve mesajları insan tarafından okunabilir dizelere serileştirmenize olanak tanır.
- Geçmişte diğer API'lerle entegre olurken JSON kullandıysanız. Bu durumda, en aşina olduğunuz formata bağlı kalmak isteyebilirsiniz.
Buna karşılık, aşağıdaki durumlarda Protobuf'ları kullanmayı seçebilirsiniz:
- Entegrasyonunuzu mümkün olduğunca hafif hale getirmek istiyorsanız. Protobuf mesajları kompakttır ve bu nedenle serileştirme ve seri durumdan çıkarma JSON'a kıyasla daha hızlıdır.
- Çoğunlukla resmi SDK'lara güvenmeyi düşünüyorsanız, çünkü bunlar Protobuf'larla çalışmanın en karmaşık kısımlarını soyutlamak için kullanabileceğiniz yardımcı yöntemler ve sınıflar sağlarlar.
Open API mesajları
Entegrasyonunuzda kullanabileceğiniz tüm mesajları mesajlar GitHub deposunda bulabilirsiniz.
Aşağıda, her serileştirme ve seri durumdan çıkarma yöntemini ayrıntılı olarak tanımlıyoruz.
JSON ¶
JSON nesneleri basit anahtar-değer çiftleri olarak tanımlanabilir. Anahtarların her zaman dizeler olduğunu, değerlerin ise aşağıdaki örnekte gösterildiği gibi farklı veri türlerinde olabileceğini unutmayın.
{
"clientMsgId": "cm_id_2",
"payloadType": 2100,
"payload": {
"keyOne": [1, 2, 10,],
"keyTwo": "valueTwo",
}
}
Örnekte, "clientMsgId" anahtarının değeri bir dize iken, "payloadType" anahtarının değeri bir tam sayıdır. payload anahtarı, üst nesnenin gövdesine yerleştirilmiş başka bir JSON nesnesi içerir. payload.keyOne anahtarının değeri bir tam sayı listesidir.
Gerekli bağlantı noktasına bağlanın
cTrader arka ucu ile bağlantı kurarken 5036 bağlantı noktasına bağlanırsanız yalnızca JSON ile çalışabilirsiniz.
JSON gönderme ve alma yöntemini öğrenin.
Protocol Buffers ¶
Protocol Buffers (veya Protobuf'lar), yapılandırılmış verileri serileştirmek için dil ve platformdan bağımsız, genişletilebilir bir mekanizma sunar. Protobuf'ları kullanarak, yapılandırılmış verileri verimli ancak genişletilebilir bir formatta kodlayabilirsiniz.
Protobuf'larla, verilerinizin nasıl yapılandırılmasını istediğinizi yalnızca bir kez tanımlamanız gerekir. Bu, .proto dosyalarında Protobuf mesaj türleri belirtilerek yapılır.
Her Protobuf mesajı, bir dizi ad-değer çifti içeren bir bilgi kaydıdır. Aşağıda, bir kişi hakkında bilgi içeren bir mesajı tanımlayan temel bir .proto dosyası örneği bulabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Gördüğünüz gibi, mesaj formatı basittir. Her mesaj türünün bir veya daha fazla benzersiz numaralı alanı vardır ve her alanın bir adı ve bir değer türü vardır; değer türleri sayılar (tam sayı veya kayan nokta), boole'lar, dizeler, ham baytlar veya hatta (yukarıdaki örnekte olduğu gibi) diğer Protocol Buffer mesaj türleri olabilir, bu da verilerinizi hiyerarşik olarak yapılandırmanıza olanak tanır.
.proto dosyaları yazma hakkında daha fazla bilgiyi Protocol Buffer dil kılavuzunda bulabilirsiniz.
Protocol Buffers hakkında daha fazla bilgi edinin.
Not
cTrader Open API, Protocol Buffers sürüm 2 sözdizimini kullanır. Ancak, seçtiğiniz Protocol Buffers derleyici/SDK'larının en son sürümlerini hala kullanabilirsiniz, çünkü bunlar geriye dönük uyumludur ve hem sürüm 2 hem de sürüm 3 mesaj dosyalarıyla çalışır.
Protobuf'ları gönderme ve alma hakkında bir eğitim görüntüleyin.
ProtoMesajlar ¶
Protobuf'larla çalışırken, Spotware tarafından tasarlanmış ProtoMessage nesneleri gönderip alacaksınız.
Ağ parçalanmasını yönetmek için, mesaj gönderme aşağıdaki çerçeve yapısını kullanır.
1 2 3 4 | |
Not
Sistem mimarisi little-endian'dır (yani, küçük uç önce), bu da veri gönderip alırken uzunluk baytlarını tersine çevirmeniz gerektiği anlamına gelir.
Her ProtoMessage aşağıdaki yapıya sahiptir.
1 2 3 4 5 | |
Yapı iki zorunlu alan içerir.
payloadType.ProtoPayloadTypekimliğini içerir. Bu alan,payloadalanında serileştirilmiş Protobuf nesnesinin türünü belirtir.payload.payloadTypeile eşleşen gerçek serileştirilmiş Protobuf mesajını içerir.
Bir diğer alan isteğe bağlıdır.
clientMsgId. İstemci tarafından atanan mesaj kimliğini içerir.
Gerçek ProtoMessage tanımı aşağıdaki gibidir.
1 2 3 4 5 6 7 8 | |
Adlandırma kuralı¶
cTrader Open API'yi oluşturan Protobuf mesajları aşağıdaki türlere ayrılabilir:
- İstek mesajları
- Yanıt mesajları
- Olay mesajları
- Model mesajları
İstek mesajları¶
İstek mesajları, cTrader arka ucundan bilgi istemek veya çeşitli işlemler gerçekleştirmek için kullanılır.
İstek mesajları, ilgili adlarının sonunda Req ile işaretlenir. Örneğin, ProtoOAAssetListReq mesajı, cTrader arka ucundan şu anda yetkilendirilmiş bir hesaba işlem için mevcut tüm varlıkların bir listesini döndürmesini ister.
Yanıt mesajları¶
Yanıt mesajları, cTrader arka ucundan alınan verileri işaretler.
Yanıt mesajları, ilgili adlarının sonunda Res ile işaretlenir. Bir örnek olarak, ProtoOAAssetListRes mesajı, şu anda yetkilendirilmiş hesabın işlem yapabileceği tüm varlıkları içeren tekrarlanan bir alana (asset) sahiptir.
Olay mesajları¶
Olay mesajları, belirli bir olayın tetiklendiğini tüm abonelerine eşzamansız olarak bildirir.
Olay mesajları, ilgili adlarının sonunda Event ile işaretlenir. Örneğin, ProtoOAMarginChangedEvent, belirli bir pozisyona ayrılan marjin miktarı her değiştiğinde gönderilir.
Model mesajları¶
Model mesajları, cTrader arka ucundaki alan modelini oluşturan varlıkları tanımlar.
Model mesajlarının adları her zaman tanımladıkları varlığın adıyla biter. Bir örnek olarak, ProtoOAAsset mesajı Asset varlığını tanımlar.
Mesaj deposu ¶
cTrader Open API Protokol Tamponları mesaj dosyalarının en son sürümünü bu depodan indirebilirsiniz.
Mesaj dosyalarının yeni bir sürümü yayınlandığında bildirim almak isterseniz mesaj deposunu takip etmenizi öneririz.
Protobuf mesajlarını derleyin ¶
Gerekli Protobuf mesajlarını edindikten sonra, seçtiğiniz dil için Protobuf derleyicisini bu mesajları tanımlayan .proto dosyaları üzerinde çalıştırabilirsiniz. Başarılı olursa, derleyici tercih ettiğiniz dilde veri erişim sınıfları oluşturacaktır.
Bu sınıflar, her alan için basit erişimciler (name() ve set_name() gibi) ve ayrıca serileştirme ve seri durumdan çıkarma işlemlerini yönetmek için yöntemler sağlar. Her sınıfın adı, derlenen her mesajın tam adıyla eşleşmelidir. Bu noktada, oluşturulan sınıfları uygulamanızda Protobuf mesajlarını doldurmak, serileştirmek ve seri durumdan çıkarmak için serbestçe kullanabilirsiniz.
Seçtiğiniz dili kullanarak Protobuf mesajlarını derleme hakkında daha fazla bilgi edinmek için.