```html
Kripto para birimi ortamı fırsatlarla dolu, ancak aynı zamanda önemli riskler de barındırıyor. Rug pull'lar ve kötü tasarlanmış token'lar önemli kayıplara yol açabilir. Rugcheck.xyz, kripto projelerini potansiyel kırmızı bayraklar açısından analiz ederek kritik bir hizmet sunar. API'si, geliştiricilerin, yatırımcıların ve analistlerin bu içgörülere programlı olarak erişmesini sağlayarak, durum tespiti çabalarını otomatikleştirir ve ölçeklendirir. Bu kılavuz, Rugcheck.xyz API'sini nasıl kullanacağınız üzerine yoğunlaşacak ve size pratik Python örnekleri sunacaktı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!
Rugcheck.xyz ve API'sine Kısa Bir Bakış
Rugcheck.xyz nedir?
Rugcheck.xyz, kripto para birimi token'larını ve akıllı sözleşmeleri kötü niyet belirtileri (rug pull'lar veya honeypot'lar gibi) veya doğal riskler açısından incelemek için tasarlanmış bir platformdur. Sözleşme kodunu, likiditeyi, token ekonomisini, geliştirici cüzdanlarını ve daha fazlasını inceler, risk değerlendirmeleri ve ayrıntılı raporlar sağlar.
Neden API?
API, Rugcheck.xyz'nin analitik motoruna programlı erişim sağlayarak şunları mümkün kılar:
- Otomasyon: Kontrolleri alım satım botlarına veya yeni token uyarı sistemlerine entegre edin.
- Ölçeklenebilirlik: Çok sayıda token'ı manuel kontrollere göre çok daha hızlı analiz edin.
- Özelleştirme: Ham API verilerini kullanarak özel panolar ve risk modelleri oluşturun.
Rugcheck.xyz API Anahtarınızı Alma – Temel Bilgiler
API'yi kullanmak için bir API anahtarına ihtiyacınız var. Rugcheck.xyz API dokümantasyonu (https://api.rugcheck.xyz/swagger/index.html
), /user/api-keys
gibi uç noktalar aracılığıyla anahtar yönetimi için bir kullanıcı hesabı sistemi ima eder.
- Kaydol/Giriş Yap: Ana Rugcheck.xyz web sitesini ziyaret edin ve bir hesap oluşturun veya oturum açın.
- API Ayarlarını Bul: Kullanıcı panonuzda "API", "Geliştirici" veya "API Anahtarları" bölümünü arayın.
- Anahtar Oluştur: Yeni bir API anahtarı oluşturun. Daha kolay tanımlama için adlandırabilirsiniz.
- Anahtarınızı Güvende Tutun: Oluşturulan anahtarı kopyalayın ve güvenli bir şekilde saklayın (örneğin, parola yöneticisi, ortam değişkeni). Asla genel kod depolarında veya istemci tarafı uygulamalarda ifşa etmeyin.
Tüm API istekleri, bu anahtarın X-API-KEY
başlığında gönderilmesini gerektirir.
Koda dalmadan önce, birlikte çalışacağımız bazı birincil uç noktalar şunlardır (ayrıntılı bilgi için Swagger belgelerine bakın):
GET /tokens/scan/{chain}/{contractAddress}
: Bir token'ın gerçek zamanlı taramasını gerçekleştirir. Risk seviyelerini, uyarıları, sözleşme ayrıntılarını, likidite bilgilerini vb. döndürür.GET /tokens/source-code/{chain}/{contractAddress}
: Bir token'ın doğrulanmış akıllı sözleşme kaynak kodunu ve ABI'sini alır.GET /wallets/risk-rating/{chain}/{walletAddress}
: Belirli bir cüzdan adresinin risk profilini değerlendirir.GET /tokens/search
: Ada veya sembole göre token arar.GET /utils/chains
: API tarafından desteklenen tüm blok zinciri ağlarını listeler.
Tüm istekler için Temel URL şudur: https://api.rugcheck.xyz
Rugcheck.xyz API'si Nasıl Kullanılır: Derinlemesine Python Örnekleri
İşte pratikleştiğimiz yer burası. requests
kütüphanesiyle Python kullanacağız.
Önkoşullar:
- Python 3.x yüklü.
requests
kütüphanesi:pip install requests
- Rugcheck.xyz API anahtarınız.
1. Kurulum ve Temel API Çağrı Fonksiyonu
İlk olarak, ortamımızı ayarlayalım ve API çağrılarını işlemek için yeniden kullanılabilir bir fonksiyon oluşturalım. API anahtarınızı bir ortam değişkeni olarak saklamak en iyi uygulamadır.Python
import requests
import json
import os
# Güvenlik için API anahtarını ortam değişkeninden yükle
API_KEY = os.getenv('RUGCHECK_API_KEY')
BASE_URL = "https://api.rugcheck.xyz"
if not API_KEY:
print("Hata: RUGCHECK_API_KEY ortam değişkeni ayarlanmamış.")
# Gerçek bir uygulamada buradan çıkmak veya bir istisna oluşturmak isteyebilirsiniz
# Gösteri için, devam etmesine izin vereceğiz ancak çağrılar başarısız olacaktır.
# API_KEY = "YOUR_FALLBACK_API_KEY_FOR_TESTING_ONLY" # Gerçek kullanım için önerilmez
HEADERS = {
"X-API-KEY": API_KEY,
"Accept": "application/json" # Kabul edilen yanıt türünü belirtmek iyi bir uygulamadır
}
def make_api_request(endpoint, params=None):
"""
Rugcheck.xyz API'sine bir GET isteği yapar.
Args:
endpoint (str): API uç nokta yolu (örneğin, "/utils/chains").
params (dict, optional): İstek için sorgu parametreleri.
Returns:
dict or None: Bir Python sözlüğü olarak JSON yanıtı veya bir hata oluşursa None.
"""
if not API_KEY or API_KEY == "YOUR_FALLBACK_API_KEY_FOR_TESTING_ONLY":
print("Hata: API Anahtarı düzgün yapılandırılmamış.")
return None
url = f"{BASE_URL}{endpoint}"
try:
response = requests.get(url, headers=HEADERS, params=params, timeout=30) # 30 saniyelik zaman aşımı
response.raise_for_status() # Kötü yanıtlar için HTTPError oluşturur (4xx veya 5xx)
return response.json()
except requests.exceptions.HTTPError as http_err:
print(f"HTTP hatası oluştu: {http_err}")
print(f"Durum Kodu: {response.status_code}")
try:
# Mümkünse API'den hata ayrıntılarını yazdırmaya çalışın
print(f"Hata Yanıtı: {response.json()}")
except json.JSONDecodeError:
print(f"Hata Yanıtı (JSON değil): {response.text}")
except requests.exceptions.ConnectionError as conn_err:
print(f"Bağlantı hatası oluştu: {conn_err}")
except requests.exceptions.Timeout as timeout_err:
print(f"Zaman aşımı hatası oluştu: {timeout_err}")
except requests.exceptions.RequestException as req_err:
print(f"İstekle ilgili beklenmedik bir hata oluştu: {req_err}")
except json.JSONDecodeError: # response.json() HTTPError olmayan durumlar için başarısız olursa
print("API'den JSON yanıtı çözülemedi.")
print(f"Yanıt içeriği: {response.text if 'response' in locals() else 'Yanıt nesnesi yok'}")
return None
Önemli: Aşağıdaki örneklerin çalışması için, RUGCHECK_API_KEY
'in ortamınızda ayarlandığından emin olun. Ayrıca, ilgili zincirler için geçerli sözleşme adreslerine ve cüzdan adreslerine ihtiyacınız olacaktır.
2. Örnek 1: Token Taramasına Derinlemesine Dalış (/tokens/scan/{chain}/{contractAddress}
)
Bu, en güçlü uç noktalardan biridir. Bir token'ı tarayalım ve yanıtı inceleyelim.Python
def get_token_scan_details(chain, contract_address, include_dex=True, include_events=False):
"""
Bir token'ı tarar ve ayrıntılı bilgileri yazdırır.
"""
print(f"\n--- Token Taranıyor: {contract_address} on {chain} ---")
endpoint = f"/tokens/scan/{chain}/{contract_address}"
params = {
"includeDexScreenerData": str(include_dex).lower(), # API, dize "true" veya "false" bekler
"includeSignificantEvents": str(include_events).lower()
}
data = make_api_request(endpoint, params=params)
if data:
print(f"Tarama Kimliği: {data.get('id')}")
print(f"Risk Seviyesi: {data.get('riskLevel')}")
trust_score_data = data.get('trustScore', {})
print(f"Güven Puanı: {trust_score_data.get('value')} ({trust_score_data.get('rating')})")
print("\nBulunan Dolandırıcılıklar:")
scams = data.get('scams', [])
if scams:
for scam in scams:
print(f" - Tür: {scam.get('type')}, Ciddiyet: {scam.get('severity')}, Mesaj: {scam.get('message')}")
else:
print(" Bu tarama tarafından belirli bir dolandırıcılık göstergesi bulunamadı.")
print("\nUyarılar:")
warnings = data.get('warnings', [])
if warnings:
for warning in warnings:
print(f" - Tür: {warning.get('type')}, Ciddiyet: {warning.get('severity')}, Mesaj: {warning.get('message')}")
else:
print(" Bu tarama tarafından uyarı bulunamadı.")
contract_details = data.get('contractDetails', {})
print("\nSözleşme Ayrıntıları:")
print(f" Adı: {contract_details.get('name')}")
print(f" Sembol: {contract_details.get('symbol')}")
print(f" Ondalık Basamaklar: {contract_details.get('decimals')}")
print(f" Sahibi: {contract_details.get('ownerAddress')}")
print(f" Oluşturucu: {contract_details.get('creatorAddress')}")
print(f" Doğrulandı: {contract_details.get('isVerified')}")
if contract_details.get('isProxy'):
print(f" Proxy Uygulaması: {contract_details.get('proxyImplementationAddress')}")
taxes = data.get('taxes', {})
print("\nVergiler:")
print(f" Alım Vergisi: {taxes.get('buyTax')}%")
print(f" Satış Vergisi: {taxes.get('sellTax')}%")
print(f" Transfer Vergisi: {taxes.get('transferTax')}%")
if taxes.get('isBuyTaxModifiable') or taxes.get('isSellTaxModifiable') or taxes.get('isTransferTaxModifiable'):
print(" Uyarı: Bir veya daha fazla vergi değiştirilebilir.")
liquidity = data.get('liquidityDetails', {})
print("\nLikidite Ayrıntıları:")
if liquidity.get('dexes'):
for dex in liquidity['dexes']:
print(f" DEX: {dex.get('name')} ({dex.get('pairAddress')})")
print(f" Likidite: {dex.get('liquidityAmountInUsd')} USD")
print(f" Toplam LP Arzı: {dex.get('totalSupply')}")
if dex.get('locks'):
for lock in dex['locks']:
print(f" Kilit: Kilitlenen Miktar {lock.get('amountLocked')} {lock.get('unlockDate')} tarihine kadar, Satıcı: {lock.get('vendorName')}")
else:
print(" Bu DEX için açık LP kilidi bulunamadı.")
else:
print(" DEX likidite bilgisi bulunamadı.")
holder_analysis = data.get('holderAnalysis', {})
print("\nSahip Analizi:")
print(f" Sahip Sayısı: {holder_analysis.get('holderCount')}")
if holder_analysis.get('topHolders'):
print(" En İyi Sahipler:")
for i, holder in enumerate(holder_analysis['topHolders'][:3]): # Kısalık için ilk 3'ü görüntüle
print(f" {i+1}. Adres: {holder.get('address')}, Bakiye: {holder.get('balance')}, % Arz: {holder.get('percentage')}%")
if include_dex and 'dexScreenerData' in data and data['dexScreenerData']:
dex_data = data['dexScreenerData']
print("\nDEX Screener Verileri:")
print(f" Fiyat (USD): {dex_data.get('priceUsd')}")
print(f" FDV (USD): {dex_data.get('fdv')}")
print(f" Hacim (24s USD): {dex_data.get('volume', {}).get('h24')}")
# Gerektiğinde daha fazla alan ekleyin
# include_events True ise 'significantEvents'i benzer şekilde işleyebilirsiniz
# print(json.dumps(data, indent=2)) # Keşif için tam ham yanıtı yazdırmak için
else:
print("Token tarama ayrıntıları alınamadı.")
# --- Token Taraması için Kullanım Örneği ---
# Desteklenen listeden geçerli bir sözleşme adresi ve zincirle değiştirin (örneğin, 'bsc', 'ethereum')
# BSC için (BEP-20 token'ları): örneğin, WBNB sözleşmesi "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"
# Ethereum için (ERC-20 token'ları): örneğin, USDC sözleşmesi "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
# test_chain = "bsc"
# test_contract = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" # BSC'de WBNB (örnek)
# get_token_scan_details(test_chain, test_contract, include_dex=True)
Tarama Sonuçlarının Yorumlanması:
riskLevel
: Anında potansiyel tehlike hissi verir. "KRİTİK" veya "YÜKSEK" aşırı dikkat gerektirir.trustScore
: İzlenebilen veya kıyaslanabilen sayısal bir puan.scams
vewarnings
: Bu diziler çok önemlidir.HONEYPOT
,PROXY_CONTRACT
,HIGH_TAXES
,OWNERSHIP_NOT_RENOUNCED
,BLACKLIST_FUNCTIONS
gibi belirli sorunları ayrıntılı olarak açıklarlar. Bu mesajları her zaman dikkatlice inceleyin.taxes
: Yüksek veya değiştirilebilir vergiler kırmızı bayraklardır.liquidityDetails
: Önemli miktarda kilidi açılmış likidite veya dağıtıcının elinde tutulan büyük bir kısım arayın. Kilitli likidite iyi bir işarettir, ancak kilit süresini ve satıcıyı doğrulayın.holderAnalysis
: Birkaç cüzdanda (özellikle dağıtıcı veya ekip cüzdanları, eğer tahsis edilmemişse) yüksek token konsantrasyonu riskli olabilir.
3. Örnek 2: Kaynak Kodunu Alma (/tokens/source-code/{chain}/{contractAddress}
)
Bir sözleşmenin doğrulanıp doğrulanmadığını bilmek ve kaynak kodunu inceleyebilmek hayati öneme sahiptir.Python
def get_token_source_code(chain, contract_address):
"""
Bir token'ın kaynak kodu hakkında bilgi alır ve görüntüler.
"""
print(f"\n--- Kaynak Kodu Alınıyor: {contract_address} on {chain} ---")
endpoint = f"/tokens/source-code/{chain}/{contract_address}"
data = make_api_request(endpoint)
if data:
print(f"Sözleşme Adı: {data.get('contractName')}")
print(f"Doğrulandı mı: {data.get('isVerified')}")
if data.get('isVerified'):
# ABI çok uzun olabilir, bu yüzden sadece bir parçasını veya varlığını yazdırın
print(f"ABI: {'Mevcut' if data.get('abi') else 'Mevcut değil'}")
source_code = data.get('sourceCode')
if isinstance(source_code, str):
print(f"Kaynak Kodu Parçacığı (ilk 500 karakter):\n{source_code[:500]}...")
# Gerçek bir uygulamada, bunu bir dosyaya kaydedebilirsiniz:
# with open(f"{contract_address}_source.sol", "w") as f:
# f.write(source_code)
# print(f"Tam kaynak kodu {contract_address}_source.sol dosyasına kaydedildi")
elif isinstance(source_code, dict): # Çok dosyalı kaynaklar için
print("Kaynak Kodu (birden fazla dosya):")
for filename, content in source_code.items():
print(f" Dosya: {filename}, Parçacık (ilk 200 karakter): {content.get('content', '')[:200]}...")
else:
print("Kaynak Kodu: Mevcut değil veya beklenmedik biçim.")
else:
print("Sözleşme kaynak kodu doğrulanmadı veya mevcut değil.")
else:
print("Kaynak kodu bilgileri alınamadı.")
# --- Kaynak Kodu için Kullanım Örneği ---
# test_chain_eth = "ethereum"
# usdc_contract_eth = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" # Ethereum'da USDC (doğrulandı)
# get_token_source_code(test_chain_eth, usdc_contract_eth)
4. Örnek 3: Cüzdan Risk Derecelendirmesi (/wallets/risk-rating/{chain}/{walletAddress}
)
Bir projeyle ilişkili cüzdanları (örneğin, dağıtıcı, ekip cüzdanları) analiz etmek riskleri ortaya çıkarabilir.Python
def get_wallet_risk_rating(chain, wallet_address):
"""
Bir cüzdan için risk derecelendirmesini alır ve görüntüler.
"""
print(f"\n--- Cüzdan için Risk Derecelendirmesi Alınıyor: {wallet_address} on {chain} ---")
endpoint = f"/wallets/risk-rating/{chain}/{wallet_address}"
data = make_api_request(endpoint)
if data:
print(f"Genel Cüzdan Risk Seviyesi: {data.get('riskLevel')}")
print(f"Özet: {data.get('summary')}")
print("\nRiskli İlişkili Token'lar:")
associated_tokens = data.get('associatedTokens', [])
if associated_tokens:
for token_info in associated_tokens:
print(f" - Token: {token_info.get('symbol')} ({token_info.get('contractAddress')})")
print(f" Zincir: {token_info.get('chain')}")
print(f" Risk Seviyesi: {token_info.get('riskLevel')}")
print(f" Rol: {token_info.get('roleInTokenContext')} (örneğin, Dağıtıcı, Sahip)")
else:
print(" Bu tarama tarafından bu cüzdana bağlı kayda değer riskli ilişkili token bulunamadı.")
# 'activitySummary', 'knownAssociations' gibi diğer alanlar da ayrıştırılabilir.
# print(json.dumps(data, indent=2)) # Tam yanıt için
else:
print("Cüzdan risk derecelendirmesi alınamadı.")
# --- Cüzdan Risk Derecelendirmesi için Kullanım Örneği ---
# Gerçek bir cüzdan adresi ve zincirle değiştirin
# Örnek: Araştırdığınız bir dağıtıcı cüzdan adresi
# test_wallet_chain = "bsc"
# test_wallet_address = "0x000000000000000000000000000000000000dead" # Örnek, gerçek bir tane kullanın
# get_wallet_risk_rating(test_wallet_chain, test_wallet_address)
5. Örnek 4: Token Arama (/tokens/search
)
Yalnızca bir token adınız veya sembolünüz varsa, sözleşme adresini bulmaya çalışabilirsiniz.Python
def search_for_token(query, chain=None, page_size=5):
"""
Token'ları arar ve sonuçları görüntüler.
"""
print(f"\n--- '{query}' sorgusuyla token aranıyor ---")
endpoint = "/tokens/search"
params = {
"query": query,
"pageSize": page_size
}
if chain:
params["chain"] = chain
print(f"Zincire göre filtreleme: {chain}")
data = make_api_request(endpoint, params=params)
if data and 'items' in data:
tokens_found = data['items']
print(f"Bulunan {len(tokens_found)} token(lar) (en fazla {page_size} gösteriliyor):")
if tokens_found:
for token in tokens_found:
print(f" Adı: {token.get('name')} ({token.get('symbol')})")
print(f" Sözleşme: {token.get('contractAddress')}")
print(f" Zincir: {token.get('chain')}")
print(f" Risk Seviyesi: {token.get('riskLevel')}")
print(f" DEX Screener Bağlantısı: {token.get('dexScreenerLink')}")
print("-" * 20)
else:
print("Sorgunuzla eşleşen token bulunamadı.")
# Tam sayfalama uygulamak istiyorsanız, sayfalama ayrıntıları da mevcuttur
# print(f"Toplam Öğe: {data.get('totalItems')}, Sayfa: {data.get('pageNumber')}, Toplam Sayfa: {data.get('totalPages')}")
else:
print("Token araması gerçekleştirilemedi veya öğe bulunamadı.")
# --- Token Araması için Kullanım Örneği ---
# search_for_token("CAKE", chain="bsc")
# search_for_token("Shiba Inu") # Zincirler arasında geniş arama
6. Örnek 5: Desteklenen Zincirleri Listeleme (/utils/chains
)
API'nin desteklediği zincirlerin bir listesini almak için basit bir yardımcı çağrı. Bu, kullanıcı girdisini doğrulamak veya bir uygulamada açılır menüleri doldurmak için yararlı olabilir.Python
def list_supported_chains():
"""
Rugcheck.xyz API tarafından desteklenen tüm zincirleri listeler.
"""
print("\n--- Rugcheck.xyz API tarafından desteklenen Blok Zincirleri ---")
endpoint = "/utils/chains"
data = make_api_request(endpoint)
if data:
for chain_info in data:
print(f" Kimlik: {chain_info.get('id'):<15} Adı: {chain_info.get('name'):<20} Yerel: {chain_info.get('nativeCurrencySymbol')}")
else:
print("Desteklenen zincirler alınamadı.")
# --- Zincirleri Listeleme için Kullanım Örneği ---
# list_supported_chains()
Örnekleri Çalıştırma:
Bu örnekleri çalıştırmak için:
- Kodu bir Python dosyası olarak kaydedin (örneğin,
rugcheck_user.py
). - API anahtarınızı ayarlayın:
export RUGCHECK_API_KEY="YOUR_ACTUAL_API_KEY"
(Linux/macOS'ta) veya sisteminizin ortam değişkenlerinde ayarlayın (Windows). - Test etmek istediğiniz her fonksiyon bloğunun sonundaki kullanım örneği satırlarının yorumunu kaldırın.
- Terminalinizden çalıştırın:
python rugcheck_user.py
Bölüm 5: En İyi Uygulamalar ve Gelişmiş İpuçları
- API Anahtar Güvenliği: Tekrar: Ortam değişkenleri veya bir sır yönetimi hizmeti kullanın. Anahtarları asla kodlamayın.
- Hız Sınırlaması: API hız sınırlarına dikkat edin.
429 Too Many Requests
hataları alırsanız, isteklerinizi yavaşlatın. Yeniden denemeler için üstel geri alma uygulayın. API dokümantasyonu veya plan ayrıntılarınız sınırları belirtmelidir. - Hata İşleme:
make_api_request
fonksiyonu temel hata işleme içerir. Uygulamanız için bunu gerektiği gibi genişletin (örneğin, hataları bir dosyaya kaydetme, belirli hata kodları için özel yeniden deneme mantığı). - Swagger'a Başvurun: Swagger UI (
https://api.rugcheck.xyz/swagger/index.html
), tüm uç noktalar, parametreler, istek gövdeleri ve yanıt şemaları için kesin kaynağınızdır. Güncellemeler için sık sık kontrol edin. - Önbelleğe Alma: Sık değişmeyen veriler için (dağıtılmış bir sözleşmenin kaynak kodu veya
forceRescan
kullanılmadığı sürece bir tarama sonucu gibi), performansı artırmak ve API çağrı hacmini azaltmak için API yanıtlarını önbelleğe almayı düşünün. - Sınırlamaları Anlayın: Rugcheck.xyz gibi otomatik araçlar inanılmaz derecede değerlidir ancak kusursuz değildir. Bilinen kalıpları ve potansiyel riskleri belirlerler. Gelişmiş dolandırıcılar yeni teknikler geliştirebilirler. API verilerini her zaman kendi araştırmalarınızla (DYOR) ve eleştirel düşüncenizle birleştirin.
- Veri Yorumlama: API veri sağlar; yorumu siz sağlarsınız. Her alanın ne anlama geldiğini anlayın (örneğin,
OWNERSHIP_NOT_RENOUNCED
hakkında bir "uyarı" önemli bir risk faktörüdür).
Sonuç
Rugcheck.xyz API'si, kripto para birimi projeleriyle ilişkili riskleri programlı olarak değerlendirmenin sağlam ve ayrıntılı bir yolunu sunar. Bu kılavuzda gösterildiği gibi, pratik kodlama yoluyla kullanımında ustalaşarak, durum tespiti sürecinizi önemli ölçüde geliştirebilir, daha güvenli otomatik alım satım sistemleri oluşturabilir ve daha şeffaf bir DeFi ekosistemine katkıda bulunabilirsiniz. Bu tür araçları her zaman sorumlu bir şekilde ve kapsamlı araştırmalarla birlikte kullanmayı unutmayın. API'nin gücü, sağladığı zengin verileri etkili bir şekilde sorgulama, ayrıştırma ve yorumlama yeteneğinizde yatar.
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!
```