Menyirikan dan menyahserikan mesej¶
Untuk menyirikan dan menyahserikan mesej yang dihantar ke dan dari backend cTrader, anda boleh menggunakan sama ada Protocol Buffers (Protobufs) atau JSON (JavaScript Object Notation).
Protobufs vs JSON
Anda mungkin ingin mempertimbangkan penggunaan JSON dalam kes berikut:
- Jika anda ingin memudahkan integrasi sebanyak mungkin. JSON mudah digunakan, membolehkan anda menyirikan mesej menjadi rentetan yang boleh dibaca manusia.
- Jika anda telah menggunakan JSON sebelum ini apabila berintegrasi dengan API lain. Dalam kes itu, anda mungkin ingin kekal dengan format yang paling anda kenali.
Sebaliknya, anda mungkin memilih untuk menggunakan Protobufs dalam kes berikut:
- Jika anda ingin menjadikan integrasi anda semudah mungkin. Mesej Protobuf adalah padat dan, oleh itu, penyirian dan penyahserian adalah lebih pantas berbanding JSON.
- Jika anda berniat untuk kebanyakannya bergantung pada SDK rasmi kerana ia menyediakan kaedah dan kelas bantuan yang boleh anda gunakan untuk mengabstrakkan bahagian paling kompleks dalam bekerja dengan Protobufs.
Mesej Open API
Semua mesej yang anda boleh gunakan dalam integrasi anda boleh didapati di repo mesej GitHub.
Di bawah, kami mentakrifkan setiap kaedah penyirian dan penyahserian secara terperinci.
JSON ¶
Objek JSON boleh ditakrifkan sebagai pasangan kunci-nilai mudah. Perhatikan bahawa kunci sentiasa rentetan manakala nilai boleh terdiri daripada jenis data yang berbeza seperti yang ditunjukkan dalam contoh di bawah.
{
"clientMsgId": "cm_id_2",
"payloadType": 2100,
"payload": {
"keyOne": [1, 2, 10,],
"keyTwo": "valueTwo",
}
}
Dalam contoh, nilai kunci "clientMsgId" adalah rentetan manakala nilai kunci "payloadType" adalah integer. Kunci "payload" mengandungi objek JSON lain yang disarangkan dalam badan objek induk. Nilai kunci "payload.keyOne" adalah senarai integer.
Sambung ke port yang diperlukan
Anda hanya boleh beroperasi dengan JSON jika anda menyambung ke port 5036 apabila membuat sambungan dengan backend cTrader.
Ketahui cara anda boleh menghantar dan menerima JSON.
Protocol Buffers ¶
Protocol Buffers (atau Protobufs) menawarkan mekanisme neutral bahasa dan platform, boleh diperluas untuk menyirikan data berstruktur. Dengan menggunakan Protobufs, anda boleh menyulitkan data berstruktur dalam format yang cekap namun boleh diperluas.
Dengan Protobufs, anda hanya perlu mentakrifkan cara anda mahu data anda berstruktur sekali. Ini dilakukan dengan menentukan jenis mesej Protobuf dalam fail .proto.
Setiap mesej Protobuf adalah rekod maklumat yang mengandungi siri pasangan nama-nilai. Di bawah, anda boleh menemui contoh asas fail .proto yang mentakrifkan mesej yang mengandungi maklumat tentang seseorang.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Seperti yang anda lihat, format mesej adalah mudah. Setiap jenis mesej mempunyai satu atau lebih medan bernombor unik, dan setiap medan mempunyai nama dan jenis nilai, di mana jenis nilai boleh menjadi nombor (integer atau titik terapung), boolean, rentetan, bait mentah atau bahkan (seperti dalam contoh di atas) jenis mesej Protocol Buffer lain, membolehkan anda menyusun data anda secara hierarki.
Anda boleh menemui lebih banyak maklumat tentang menulis fail .proto dalam panduan bahasa Protocol Buffer.
Ketahui lebih lanjut tentang Protocol Buffers.
Nota
cTrader Open API menggunakan sintaks Protocol Buffers versi 2. Walau bagaimanapun, anda masih boleh menggunakan versi terkini pengkompil/SDK Protocol Buffers yang anda pilih kerana ia serasi ke belakang dan berfungsi dengan kedua-dua fail mesej versi 2 dan versi 3.
Lihat tutorial tentang menghantar dan menerima Protobufs.
ProtoMessages ¶
Apabila bekerja dengan Protobufs, anda akan menghantar dan menerima objek ProtoMessage yang direka oleh Spotware.
Untuk mengendalikan fragmentasi rangkaian, penghantaran mesej menggunakan struktur bingkai berikut.
1 2 3 4 | |
Nota
Seni bina sistem adalah little-endian (iaitu, hujung kecil dahulu), yang bermaksud anda mesti membalikkan bait panjang apabila menghantar dan menerima data.
Setiap ProtoMessage mempunyai struktur berikut.
1 2 3 4 5 | |
Struktur mengandungi dua medan wajib.
payloadType. Mengandungi IDProtoPayloadType. Medan ini menandakan jenis objek Protobuf yang disirikan dalam medanpayload.payload. Mengandungi mesej Protobuf yang disirikan sebenar yang sepadan denganpayloadType.
Satu medan lain adalah pilihan.
clientMsgId. Mengandungi ID mesej yang ditetapkan oleh klien.
Takrifan ProtoMessage sebenar kelihatan seperti berikut.
1 2 3 4 5 6 7 8 | |
Konvensyen penamaan¶
Mesej Protobuf yang membentuk cTrader Open API boleh dikategorikan kepada jenis berikut:
- Mesej permintaan
- Mesej respons
- Mesej peristiwa
- Mesej model
Mesej permintaan¶
Mesej permintaan digunakan untuk meminta maklumat daripada sistem bahagian belakang cTrader atau melakukan pelbagai operasi.
Mesej permintaan ditandakan dengan Req pada akhir nama masing-masing. Sebagai contoh, mesej ProtoOAAssetListReq meminta sistem bahagian belakang cTrader untuk mengembalikan senarai semua aset yang tersedia untuk didagangkan kepada akaun yang sedang diberi kuasa.
Mesej respons¶
Mesej respons menandakan data yang diterima daripada sistem bahagian belakang cTrader.
Mesej respons ditandakan dengan Res pada akhir nama masing-masing. Sebagai ilustrasi, mesej ProtoOAAssetListRes mempunyai medan berulang (asset) yang mengandungi semua aset yang boleh didagangkan oleh akaun yang sedang diberi kuasa.
Mesej peristiwa¶
Mesej peristiwa secara asinkron memberitahu semua pelanggan mereka bahawa peristiwa tertentu telah dicetuskan.
Mesej peristiwa ditandakan dengan Event pada akhir nama masing-masing. Sebagai contoh, ProtoOAMarginChangedEvent dihantar setiap kali jumlah margin yang diperuntukkan kepada kedudukan tertentu berubah.
Mesej model¶
Mesej model menerangkan entiti yang membentuk model domain dalam sistem bahagian belakang cTrader.
Nama mesej model selalu berakhir dengan nama entiti yang mereka takrifkan. Sebagai contoh, mesej ProtoOAAsset mentakrifkan entiti Asset.
Repositori mesej ¶
Anda boleh memuat turun versi terkini fail mesej Protobuf Open API cTrader dari repositori ini.
Kami mengesyorkan anda mengikuti repositori mesej jika anda ingin dimaklumkan setiap kali versi baharu fail mesej dikeluarkan.
Kompilasi mesej Protobuf ¶
Setelah anda memperoleh mesej Protobuf yang diperlukan, anda boleh menjalankan pengkompil Protobuf untuk bahasa pilihan anda pada fail .proto yang mentakrifkan mesej ini. Pada kejayaan, pengkompil akan menjana kelas akses data dalam bahasa pilihan anda.
Kelas ini menyediakan pengakses mudah untuk setiap medan (seperti name() dan set_name()) serta kaedah untuk mengendalikan penyiratan dan penyahseratan. Nama setiap kelas harus sepadan dengan nama penuh setiap mesej yang dikompil. Pada ketika ini, anda boleh menggunakan kelas yang dijana secara bebas dalam aplikasi anda untuk mengisi, menyiratan dan menyahseratan mesej Protobuf.
Untuk mengetahui lebih lanjut tentang mengkompilasi mesej protobuf menggunakan bahasa pilihan anda.