Dijital varlık değişimi alanında küresel bir lider olan Coinbase, kapsamlı bir Uygulama Programlama Arayüzü (API) paketi sunmaktadır. Bu API'ler, Coinbase'in alım satım ve veri hizmetleriyle programlı olarak entegre olmak isteyen geliştiriciler, algoritmik yatırımcılar ve finans kurumları için temeldir. Bu kılavuz, pratik uygulamalara, temel işlevlere ve operasyonel en iyi uygulamalara odaklanarak Coinbase Exchange API'sinin ayrıntılı bir teknik incelemesini sunmaktadır.
Geliştirici Ekibinizin maksimum verimlilikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?
Apidog tüm taleplerinizi karşılıyor ve Postman'in yerini çok daha uygun bir fiyata alıyor!
İlk Kurulum ve Kimlik Doğrulama
Coinbase Exchange API'siyle başarılı bir şekilde etkileşim, hesap hazırlığı, güvenli API anahtarı yönetimi ve kimlik doğrulama protokolünün doğru bir şekilde anlaşılmasıyla başlar.
Hesap Ön Koşulları ve API Anahtarı Oluşturma
Genellikle Coinbase Advanced Trade veya kurumsal bir hesap olan doğrulanmış bir Coinbase hesabı gereklidir. API anahtarları, hesap ayarlarınızda oluşturulur. Bu işlem, üç kritik bilgi parçası üretir:
- API Anahtarı: Uygulamanızı tanımlayan genel, alfasayısal bir dize (örneğin,
k7b9f2d7e8h1g3j4
). - API Sırrı: Özel, alfasayısal bir dize (örneğin,
S9vP3rK2sLqR7xW1yZ0aB5cD6fE8gH9i
). Bu sır, oluşturulduktan sonra yalnızca bir kez görüntülenir ve güvenli bir şekilde saklanmalıdır. - Parola: Anahtar oluşturma sırasında sizin tarafınızdan oluşturulan ek bir güvenlik kimlik bilgisi (örneğin,
mySecureP@$$phr@se2024!
).
API anahtarı izinleri ayrıntılıdır ve eylemleri (örneğin, yalnızca görüntüleme, alım satım yürütme, para çekme yetenekleri) kısıtlamanıza olanak tanır. Her zaman en az ayrıcalık ilkesine uyun.
API İstek Kimlik Doğrulaması
Coinbase Exchange API'si, tüm özel, kimliği doğrulanmış uç noktalar için imza tabanlı bir kimlik doğrulama mekanizması (HMAC-SHA256) kullanır. Her istek, birkaç özel HTTP başlığı gerektirir:
CB-ACCESS-KEY
: API Anahtarınız.CB-ACCESS-SIGN
: base64 kodlanmış HMAC-SHA256 imzası.CB-ACCESS-TIMESTAMP
: Geçerli bir Unix epoch zaman damgası (saniye).CB-ACCESS-PASSPHRASE
: API Anahtarınızın parolası.
İmza (CB-ACCESS-SIGN
), bir ön karma dizesinin bir HMAC-SHA256 karması oluşturularak oluşturulur. Ön karma dizesi, aşağıdakilerin bir birleşimidir:
- Zaman damgası (bir dize olarak).
- Büyük harflerle HTTP yöntemi (örneğin,
GET
,POST
). - İstek yolu (örneğin,
/orders
,/products/BTC-USD/book
). - İstek gövdesi (
POST
istekleri için; gövde yoksa boş bir dize).
Örnek ön karma dizesi oluşturma (bir POST isteği için):
timestamp = str(time.time())
method = "POST"
request_path = "/orders"
body_json_string = '{"product_id": "BTC-USD", "side": "buy", "type": "limit", "price": "50000.00", "size": "0.1"}' // JSON string, not Python dict
prehash_string = timestamp + method + request_path + body_json_string
// The API Secret needs to be base64-decoded before being used as the HMAC key.
// secret_decoded = base64.b64decode(api_secret)
// signature = hmac.new(secret_decoded, prehash_string.encode('utf-8'), hashlib.sha256).digest()
// CB_ACCESS_SIGN = base64.b64encode(signature)
Yanlış oluşturulmuş ön karma dizeleri veya zaman damgası tutarsızlıkları (sunucunuzun saatinin NTP aracılığıyla senkronize edildiğinden emin olun), kimlik doğrulama hatalarının (HTTP 401) yaygın kaynaklarıdır.
İstemci Kütüphaneleri ve Geliştirme Ortamı
Python (cbpro
), Node.js (coinbase-pro-node
), Java ve Go gibi diller için resmi ve topluluk tarafından geliştirilen istemci kütüphaneleri, bu kimlik doğrulama karmaşıklıklarını soyutlar. Alternatif olarak, curl
veya standart HTTP istemci modülleri gibi araçlar kullanılarak doğrudan HTTP istekleri yapılabilir ve imzalama işleminin manuel olarak uygulanmasını gerektirir.
Test için Sandbox Ortamı
Coinbase, canlı pazarlarla etkileşime girmeden önce kritik öneme sahip olan geliştirme ve test için bir Sandbox ortamı sağlar.
Amaç ve İşlevsellik
Sandbox, üretim API işlevselliğini yansıtır ancak test fonları ve simüle edilmiş piyasa verilerini kullanır. Şunlar için izin verir:
- Alım satım algoritmalarının risksiz testi.
- API entegrasyon mantığının ve hata işleme mekanizmasının doğrulanması.
- API istek/yanıt yapılarının tanınması.
Üretimden Temel Farklılıklar
- API Uç Noktaları: Sandbox, farklı temel URL'ler kullanır.
- Üretim:
https://api.exchange.coinbase.com
- Sandbox:
https://api-public.sandbox.exchange.coinbase.com
(Not: Tam Sandbox URL'leri her zaman resmi belgelerden teyit edilmelidir). - API Anahtarları: Sandbox ile özel olarak oluşturulması ve kullanılması gereken ayrı API anahtarları.
- Piyasa Verileri ve Likidite: Emir defteri derinliği, işlem hacmi ve fiyat hareketleri simüle edilir. Emir dolum simülasyonu daha basit olabilir ve gerçek dünyadaki kayma veya kısmi dolum senaryolarını mükemmel bir şekilde yansıtmayabilir.
- Gerçek Fon Yok: Tüm varlıklar ve işlemler sanaldır. Test bakiyeleri tipik olarak sağlanır veya sıfırlanabilir.
Üretime Geçiş
Sağlam bir dağıtım stratejisi, öncelikle API kimlik bilgileri ve temel URL'ler açısından farklılık gösteren Sandbox ve Üretim için farklı yapılandırmalar içerir. Gerçek fonlarla ilgili hataları önlemek için Sandbox'ta kapsamlı testler çok önemlidir.
Temel API İşlevleri: Uç Noktalar ve Veri Yapıları
API, genel olarak hesap yönetimi, piyasa verisi alma ve alım satım işlemleri olarak kategorize edilir.
Hesap Yönetimi
Hesap durumlarını ve geçmişini sorgulamak için uç noktalar.
Hesap Bakiyelerini Getirme (GET /accounts
)
Tüm kullanıcı hesaplarının (itibari para ve kripto) bakiyeleriyle birlikte bir listesini alır.
Bir BTC hesabı için Örnek Yanıt Parçacığı:
{
"id": "7532b1f0-20f4-4ba7-96f0-303b592d130f",
"currency": "BTC",
"balance": "0.50123456",
"available": "0.49123456",
"hold": "0.01000000",
"profile_id": "your-profile-id-string"
}
balance
toplam tutardır, available
alım satım için kullanılabilendir ve hold
açık emirler için ayrılan fonlardır.
Hesap Geçmişi / Defter (GET /accounts/{account_id}/ledger
)
Belirli bir hesap için işlemlerin (alım satımlar, ücretler, transferler) sayfalara ayrılmış bir listesini sağlar.
Tipik Sorgu Parametreleri: before
(sayfalama için imleç), after
(imleç), limit
(en fazla 100, varsayılan 100), start_date
, end_date
.
Örnek Defter Girişi Parçacığı:
{
"id": "1001874",
"created_at": "2023-10-26T10:00:00.000Z",
"amount": "-0.00005000",
"balance": "0.50118456",
"type": "fee",
"details": {
"order_id": "d0c5340b-6d6c-49d9-b567-48c4bfca13d2",
"product_id": "BTC-USD",
"trade_id": "7423736"
}
}
Piyasa Veri Uç Noktaları
Gerçek zamanlı ve geçmiş piyasa bilgilerine erişim.
Ürünler / Alım Satım Çiftleri (GET /products
)
Mevcut tüm alım satım çiftlerini ve özelliklerini listeler.
Örnek Ürün Parçacığı (BTC-USD):
{
"id": "BTC-USD",
"base_currency": "BTC",
"quote_currency": "USD",
"base_min_size": "0.0001", // Minimum order size in base currency
"base_max_size": "200.0", // Maximum order size in base currency
"quote_increment": "0.01", // Smallest price change unit for quote currency
"base_increment": "0.00000001", // Smallest size change unit for base currency
"display_name": "BTC/USD",
"min_market_funds": "1", // Minimum funds for a market order in quote currency
"max_market_funds": "1000000", // Maximum funds for a market order
"status": "online",
"status_message": "",
"cancel_only": false,
"limit_only": false,
"post_only": false,
"trading_disabled": false
}
Emir Defterleri (GET /products/{product_id}/book
)
Bir ürün için mevcut emir defterini alır.
Sorgu Parametreleri: level
(1, 2 veya 3).
* Seviye 1: Yalnızca en iyi alış ve satış. * Seviye 2: Her fiyat seviyesinde toplanmış alış ve satış listesi. (Taraf başına en fazla 50 giriş). * Seviye 3: Bireysel, toplanmamış emirlerle dolu emir defteri (kimlik doğrulama gerektirir ve daha katı oran sınırlarına sahip olabilir). Örnek Seviye 2 Emir Defteri Parçacığı (BTC-USD):
{
"sequence": 1234567890,
"bids": [
["49999.99", "0.75", 3], // [price, size, num-orders-at-this-price]
["49999.98", "1.20", 5]
],
"asks": [
["50000.01", "0.50", 2],
["50000.02", "1.00", 4]
],
"time": "2023-10-26T10:05:00.123Z"
}
Ürün Ticker'ı (GET /products/{product_id}/ticker
)
Son işlem (işaret), en iyi alış/satış ve 24 saatlik hacim hakkında anlık bilgi.
Örnek Ticker Parçacığı (BTC-USD):
{
"trade_id": 7423739,
"price": "50001.50", // Last trade price
"size": "0.005", // Last trade size
"bid": "50001.49",
"ask": "50001.51",
"volume": "1250.75", // 24-hour trading volume in base currency
"time": "2023-10-26T10:06:15.234Z"
}
Tarihsel Oranlar / Mum Çubukları (GET /products/{product_id}/candles
)
Tarihsel fiyat verilerini (OHLCV) alır.
Sorgu Parametreleri: start
(ISO 8601 zaman damgası), end
(ISO 8601), granularity
(saniye cinsinden: 60, 300, 900, 3600, 21600, 86400). İstek başına en fazla 300 mum çubuğu.
Örnek Mum Verileri (1 saatlik ayrıntı):
[
// [time, low, high, open, close, volume]
[1666771200, 49850.25, 50050.75, 49900.00, 50025.10, 15.2345], // time is Unix epoch
[1666767600, 49700.00, 49950.50, 49750.20, 49850.25, 22.6789]
]
Alım Satım İşlemleri
Emir verme, yönetme ve sorgulama için uç noktalar.
Emir Verme (POST /orders
)
Eşleştirme motoruna yeni emirler gönderir.
Ortak İstek Gövdesi Parametreleri:
{
"client_oid": "my-unique-client-order-id-001", // Optional: UUID for idempotency
"product_id": "BTC-USD",
"side": "buy", // "buy" or "sell"
"type": "limit", // "limit", "market", or "stop" (stop orders are more complex)
"price": "49500.00", // Required for limit orders
"size": "0.0125", // Amount of base currency to buy/sell
// "funds": "500.00", // For market buy orders: amount of quote currency to spend
"time_in_force": "GTC", // GTC (Good 'Til Canceled), GTT (Good 'Til Time), IOC (Immediate Or Cancel), FOK (Fill Or Kill)
// "cancel_after": "min" / "hour" / "day" (used with GTT)
"post_only": false, // If true, order is rejected if it would immediately match (ensures maker)
"stp": "dc" // Self-trade prevention: "dc" (Decrease and Cancel), "co" (Cancel Oldest), "cn" (Cancel Newest), "cb" (Cancel Both)
}
Başarılı bir emir yerleşimi, sunucu tarafından atanan id
dahil olmak üzere emir ayrıntılarını döndürür.
Emirleri Yönetme
- Emir Durumunu Al (
GET /orders/{order_id_or_client_oid}
): Tek bir emri, sunucu kimliğine veyaclient_oid
'nize göre alır (client_oid
içinclient:
ile önekleyin, örneğin,GET /orders/client:my-unique-client-order-id-001
). - Açık Emirleri Listele (
GET /orders
): Etkin emirlerinizin sayfalara ayrılmış bir listesini döndürür.status
(open
,pending
,active
) veproduct_id
gibi parametreler filtreleme için kullanılabilir. - Emri İptal Et (
DELETE /orders/{order_id_or_client_oid}
): Belirli bir açık emri iptal eder. Başarılı bir iptal isteği üzerine emir kimliğini döndürür. - Tüm Emirleri İptal Et (
DELETE /orders
): Tüm açık emirleri iptal eder, isteğe bağlı olarak belirli birproduct_id
için.
Dolumlar (GET /fills
)
Yürütülen işlemlerinizin (dolumlar) sayfalara ayrılmış bir listesini alır.
Sorgu Parametreleri: order_id
, product_id
, before
, after
, limit
.
Örnek Dolum Parçacığı:
{
"trade_id": 7423800,
"product_id": "BTC-USD",
"price": "49500.00",
"size": "0.00500000",
"order_id": "e4f2c1a0-f3d8-4b9b-8b7e-1f2a3c4d5e6f",
"created_at": "2023-10-26T10:15:30.123Z",
"liquidity": "T", // "M" for Maker, "T" for Taker
"fee": "0.00000250", // Fee in quote currency (USD for BTC-USD) or base currency depending on API.
"settled": true,
"side": "buy"
}
Eşleştirme Motoru
Eşleştirme motoru, bir Fiyat-Zaman Önceliği algoritmasına göre alış ve satış emirlerini eşleştirir:
- Fiyat Önceliği: Daha uygun fiyatlara sahip emirler önceliklidir (alışlar için daha yüksek fiyat, satışlar için daha düşük fiyat).
- Zaman Önceliği: Aynı fiyattaki emirler arasında, en erken gönderilen emir önceliklidir.
- Maker ve Taker Emirleri:
- Maker: Emir defterine likidite ekleyen bir emir (örneğin, hemen dolmayan bir limit emri). Tipik olarak daha düşük alım satım ücretlerinden yararlanır (örneğin, %0,00 - %0,40).
post_only
bayrağı, bir emrin maker olmasını sağlamaya yardımcı olur. - Taker: Likiditeyi kaldıran bir emir (örneğin, bir piyasa emri veya hemen dolan bir limit emri). Biraz daha yüksek ücretlere neden olur (örneğin, %0,05 - %0,60). Ücret katmanları genellikle 30 günlük hacme göre belirlenir.
Bu mantığı anlamak, emir yerleştirme stratejileri, kaymayı yönetme ve ücret optimizasyonu için hayati öneme sahiptir.
Oran Sınırları ve Kısıtlama
API erişimi, platform kararlılığını ve adil kullanımı sağlamak için oran sınırlarına tabidir.
Türler ve Tanımlama
Sınırlar tipik olarak API anahtarı başına, IP adresi başına uygulanır ve uç noktaya göre değişebilir (örneğin, özel imzalı uç noktalar ve genel imzasız uç noktalar). Genel uç noktalar, IP başına 3-10 istek/saniye gibi sınırlara sahip olabilir. Özel (imzalı) uç noktalar genellikle daha yüksek sınırlara sahiptir, ayrıca API anahtarı başına.
API yanıtları, mevcut oran sınırı durumunu gösteren başlıklar içerir:
CB-RATELIMIT-LIMIT
: Geçerli pencere için toplam istek sınırı.CB-RATELIMIT-REMAINING
: Pencerede kalan istekler.CB-RATELIMIT-RESET
: Sınır penceresinin sıfırlandığı Unix zaman damgası.
Sınırları aşmak, bir HTTP 429 Too Many Requests
hatasıyla sonuçlanır.
İşleme Stratejileri
- Proaktif İzleme: İstek göndermeden önce
CB-RATELIMIT-REMAINING
'i kontrol edin. - Verimli API Kullanımı:
- Yalnızca gerekli verileri getirin.
- REST uç noktalarını yoklamak yerine gerçek zamanlı veriler için WebSocket beslemelerini kullanın.
- Statik veya nadiren değişen verileri (örneğin,
/products
'ten ürün ayrıntıları) önbelleğe alın.
- Üstel Geri Alma: Bir
429
hatası aldıktan sonra, yeniden denemeden önce bekleyin. Sunucuyu bunaltmamak için üstel bir geri alma (örneğin, 1 saniye, ardından 2 saniye, 4 saniye, 8 saniye vb. bekleme, titreme ile) uygulayın. - Gerçek Zamanlı Veriler için WebSockets: Emir defteri güncellemeleri, canlı işlemler ve ticker'lar için, WebSocket bağlantıları REST yoklamadan önemli ölçüde daha verimlidir.
Operasyonel Mükemmellik: Çalışma Kitabı İlkeleri
Sağlam operasyonel uygulamalar, herhangi bir alım satım API entegrasyonu için kritiktir.
İzleme ve Uyarı
- API Bağlantısı ve Gecikme Süresi: API uç noktalarına ping sürelerini ve başarı oranlarını izleyin.
- Oran Sınırı Tüketimi:
CB-RATELIMIT-REMAINING
'i izleyin ve sıfıra yaklaştığında uyarı verin. - Emir Yürütme: Başarısız emir yerleştirmeleri, beklenen sürelerin ötesinde
pending
durumunda takılı kalan emirler veya önemli dolum tutarsızlıkları hakkında uyarı verin. - Bakiye Tutarsızlıkları: Beklenmedik sapmalar için temel hesap bakiyelerini izleyin.
- Hata Oranları: HTTP
4xx
ve5xx
hata yüzdelerini izleyin; artışları araştırın. Prometheus/Grafana veya Datadog gibi araçlar yaygın olarak kullanılır. - Coinbase Sistem Durumu: Platform genelindeki olaylar veya bakım için resmi Coinbase durum sayfasına (örneğin,
status.coinbase.com
) abone olun veya düzenli olarak kontrol edin.
Günlüğe Kaydetme
Hata ayıklama ve denetleme için temel bilgileri günlüğe kaydedin:
- Zaman damgası (UTC).
- İstek: yöntem, yol, başlıklar (API anahtarı gizlenmiş), gövde (duyarlı veriler gizlenmiş).
- Yanıt: durum kodu, başlıklar (özellikle oran sınırı ve
CB-TRACE-ID
gibi istek kimliği), gövde. - Korelasyon Kimlikleri: Sisteminiz bunları kullanıyorsa veya yanıt başlıklarından
CB-TRACE-ID
kullanın.
Güvenlik En İyi Uygulamaları
- API Anahtar Güvenliği: Anahtarları güvenli kasalarda (örneğin, HashiCorp Vault, AWS Secrets Manager) veya ortam değişkenlerinde saklayın. Asla kodlamayın veya sürüm kontrolüne işlemeyin.
- IP Beyaz Listeye Alma: Mümkünse, API anahtarı erişimini belirli IP adresleriyle kısıtlayın.
- En Az Ayrıcalık İlkesi: API anahtarlarına yalnızca kesinlikle gerekli izinleri verin.
- Düzenli Denetimler: API anahtarı kullanımını ve izinlerini periyodik olarak inceleyin.
- API Sürümlendirmesi: API sürüm değişikliklerine dikkat edin (örneğin,
/v2/products
,/v3/products
). Eskime programları ve geçiş yolları için geliştirici duyurularını izleyin.
Gelişmiş Konular ve Teknikler
Gerçek Zamanlı Veriler için WebSocket Beslemeleri
Coinbase Exchange, düşük gecikmeli, gerçek zamanlı veriler için WebSocket beslemeleri sağlar.
- Uç Nokta: Tipik olarak tek bir WebSocket URL'si (örneğin,
wss://ws-feed.exchange.coinbase.com
). - Abonelik: Bağlandıktan sonra, kanallara ve ürün kimliklerine abone olmak için bir JSON mesajı gönderin.
Örnek Abonelik Mesajı:
{
"type": "subscribe",
"product_ids": ["ETH-USD", "BTC-USD"],
"channels": [
"level2", // For Level 2 order book updates
"heartbeat", // To keep connection alive and monitor status
{
"name": "ticker", // Ticker channel for specific products
"product_ids": ["ETH-USD", "BTC-USD"]
},
"status" // For updates on product trading statuses
],
// For user-specific updates (orders, balances), authentication is required within the WebSocket handshake or initial messages.
// "signature": "...", "key": "...", "passphrase": "...", "timestamp": "..." (if auth needed for certain channels)
}
Mesaj Türleri:
heartbeat
: Bağlantı sağlığını onaylamak ve mevcut ürün durumlarını sağlamak için periyodik mesaj.snapshot
: Abone olunan verilerin ilk durumu (örneğin,level2
için tam emir defteri anlık görüntüsü).l2update
: Seviye 2 emir defterine yapılan artımlı değişiklikler (alış/satış eklendi, değiştirildi veya kaldırıldı).ticker
: Gerçek zamanlı fiyat, hacim ve alış/satış güncellemeleri.matches
(veyatrade
): Abone olunan ürünler için gerçek zamanlı yürütülen işlemler.error
: Abonelik veya bağlantıyla ilgili bir sorunu gösterir.
WebSocket bağlantılarını yönetmek, yeniden bağlanma mantığını, mesaj sıralamasını (varsa, mesajlardaki sıra numaraları aracılığıyla) ve yerel durum bakımını (örneğin, bir emir defterinisnapshot
vel2update
mesajlarından yeniden oluşturma) içerir.
İdempotens ve client_oid
Ağ sorunları veya yeniden denemeler nedeniyle yinelenen emir gönderimlerini önlemek için, POST /orders
istekleri bir client_oid
alanı içerebilir. Bu, istemciniz tarafından oluşturulan benzersiz bir tanımlayıcı (örneğin, UUID v4) olmalıdır.
- Belirli bir
client_oid
'ye sahip bir emir alınır ve işlenirse, aynıclient_oid
'ye sahip sonraki özdeş istekler belirli bir zaman diliminde (örneğin, 24 saat) yeni bir emir oluşturmayacak, bunun yerine orijinal emrin durumunu döndürecektir. - Bu, bir "emir ver" isteğini yeniden denemenin güvenli olmasını sağlar.
Kendi Kendine Alım Satım Önleme (STP)
Emir yerleşimindeki stp
parametresi (POST /orders
), bir hesabın emirlerinin birbiriyle eşleşmesini önlemeye yardımcı olur. Seçenekler tipik olarak şunları içerir:
dc
(Azalt ve İptal Et): Agresif (alıcı) emir iptal edilir ve dinlenme (yapıcı) emrinin boyutu, agresif emrin boyutu kadar azaltılır.co
(En Eskiyi İptal Et): Daha eski emir iptal edilir.cn
(En Yeniyi İptal Et): Daha yeni (agresif) emir iptal edilir.cb
(Her İkisini de İptal Et): Her iki emir de iptal edilir.
Sonuç
Coinbase Exchange API'si, geliştiricilerin gelişmiş alım satım uygulamaları ve entegrasyonları oluşturmaları için kapsamlı bir araç seti sağlar. Kimlik doğrulamasını ustalaşmak, veri yapılarını anlamak, oran sınırlarına saygı duymak ve sağlam operasyonel uygulamalar uygulamak, tam potansiyelinden yararlanmanın anahtarıdır. Gerçek zamanlı veriler için WebSocket beslemelerine ve idempotens için client_oid
gibi özelliklere geçiş, geliştiricileri kripto para alım satımının hızlı dünyasında dayanıklı ve verimli sistemler oluşturma konusunda daha da güçlendiriyor. Yeni özellikler, uç nokta değişiklikleri ve en iyi uygulamalar hakkında güncel kalmak için Coinbase'in resmi geliştirici belgelerine sürekli dikkat etmek çok önemlidir.