Kısaca: Nodetonet küçük ve kararlı bir REST API'ye sahiptir. Resmi SDK'lar hazır olana kadar herhangi bir dilde çalışan bir istemciyi yaklaşık 20 satırda yazabilirsiniz — bu sayfa tam olarak o 20 satırı Python, Node.js, Go ve Ruby için hazır şekilde sunuyor.
Bu sayfa, en çok sorulan dört dil için kısa ve çalışan SDK tarzı örnekleri topluyor: Python, Node.js, Go ve Ruby. Her örnek POST /api/v1/proxies'e karşı bir proxy ya da tünel oluşturur, URL'yi yazdırır ve bir repo'ya nodetonet.py, nodetonet.mjs vb. olarak bırakılacak kadar kısadır. Ne çağırdığınız konusunda daha fazla bağlam istiyorsanız REST API: ilk çağrınız ve API anahtarınızı anlama yazılarıyla başlayın.
Kapsam hakkında bir not: PyPI, npm, pkg.go.dev veya RubyGems'te henüz birinci parti SDK yayınlamıyoruz. REST API küçük — bir ana kaynak, dört fiil — dolayısıyla "SDK yok" ile "kullanışlı bir SDK" arasındaki boşluk yaklaşık 20 satır kod. Resmi SDK çıktığında pip install nodetonet diyebileceksiniz ve aynı şekli dahili yeniden deneme, sayfalama ve typed hata desteğiyle elde edeceksiniz.
API'ye kısa bir bakış
Dil örneklerine dalmadan önce, çekirdek kaynağın şekli şu. Aşağıdaki her istemci bu dört işlemi kapsar:
| Fiil | Yol | Ne yapar | Kimlik doğrulama |
|---|---|---|---|
POST | /api/v1/proxies | Proxy / tünel oluşturur | Bearer token |
GET | /api/v1/proxies | Proxy'leri listeler | Bearer token |
GET | /api/v1/proxies/:id | Tek proxy'yi inceler | Bearer token |
DELETE | /api/v1/proxies/:id | Proxy'yi siler | Bearer token |
Bearer token'ınız paneldeki /tokens altında yer alır — ortam değişkeninde tutun, asla doğrudan koda gömmayın. POST gövdesi subdomain, target_host ve target_port alır; yanıt gövdesi size id ve url döndürür. API yüzeyi bu kadar. Makinenin okuyabileceği tam spec /openapi.json adresinde bulunuyor.
1 · Python
Tek dosya, tek bağımlılık (requests). Token'ı bir ortam değişkeninden okur, böylece güvenle commit edilebilir. Script'ler, Jupyter notebook'ları, Django uygulamaları veya herhangi bir Python otomasyon hattı için uygundur — Python'da programatik tünel oluşturma yazısındaki örüntüler gibi.
# nodetonet.py
import os, requests
BASE = "https://nodetonet.com/api/v1"
TOKEN = os.environ["NTN_TOKEN"]
H = {"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"}
def create_proxy(subdomain, target_port, target_host="127.0.0.1"):
r = requests.post(f"{BASE}/proxies", json={
"subdomain": subdomain,
"target_host": target_host,
"target_port": target_port,
}, headers=H, timeout=10)
r.raise_for_status()
return r.json()
def delete_proxy(proxy_id):
r = requests.delete(f"{BASE}/proxies/{proxy_id}", headers=H, timeout=10)
r.raise_for_status()
if __name__ == "__main__":
p = create_proxy("alice-dev", 3000)
print(p["url"])
İşlevsel bir Python istemcisi bu. Olduğu gibi kullanın, bir sınıf içine sarın ya da tek seferlik entegrasyonlar için bir Jupyter notebook'a yapıştırın. raise_for_status() çağrısı hataları sessizce yutmak yerine hemen yüzeye çıkarır.
2 · Node.js
Sıfır npm bağımlılığı — Node 18+ yerleşik fetch'ini kullanır. Bir projeye nodetonet.mjs olarak ekleyin. Serverless bir fonksiyon, bir derleme betiği veya yerel geliştirme sırasında bir Next.js API route'unda eşit derecede çalışır.
// nodetonet.mjs
const BASE = 'https://nodetonet.com/api/v1';
const TOKEN = process.env.NTN_TOKEN;
async function api(path, opts = {}) {
const res = await fetch(BASE + path, {
...opts,
headers: {
Authorization: 'Bearer ' + TOKEN,
'Content-Type': 'application/json',
...(opts.headers || {}),
},
});
if (!res.ok) throw new Error(res.status + ' ' + (await res.text()));
return res.json();
}
export const createProxy = (subdomain, port, host = '127.0.0.1') =>
api('/proxies', { method: 'POST', body: JSON.stringify({
subdomain, target_host: host, target_port: port,
})});
export const deleteProxy = (id) =>
api('/proxies/' + id, { method: 'DELETE' });
const p = await createProxy('alice-dev', 3000);
console.log(p.url);
3 · Go
Yalnızca standart kütüphane — üçüncü taraf paket gerekmez. Uzun süre çalışan bir daemon veya tek seferlik bir CLI ile birleştirin. Struct etiketleri JSON yanıt şekliyle örtüştüğünden unmarshalling doğrudandır.
// nodetonet.go
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
type Proxy struct {
ID string `json:"id"`
URL string `json:"url"`
}
func CreateProxy(sub string, port int) (*Proxy, error) {
body, _ := json.Marshal(map[string]interface{}{
"subdomain": sub, "target_host": "127.0.0.1", "target_port": port,
})
req, _ := http.NewRequest("POST",
"https://nodetonet.com/api/v1/proxies", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("NTN_TOKEN"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil { return nil, err }
defer res.Body.Close()
if res.StatusCode >= 300 {
return nil, fmt.Errorf("status %d", res.StatusCode)
}
p := &Proxy{}
return p, json.NewDecoder(res.Body).Decode(p)
}
func main() {
p, _ := CreateProxy("alice-dev", 3000)
fmt.Println(p.URL)
}
Go istemcisinin tamamı bu — module nodetonet dışında herhangi bir go.mod gerekmez. Daha büyük bir serviste son tarih yayılımı gerekiyorsa deyimsel Go yaklaşımı context.WithTimeout ile güzel eşleşir.
4 · Ruby
Yine standart kütüphane — net/http ve json kullanır. Gem bağımlılığı eklemeden bir Rails uygulamasına veya Sinatra betiğine bırakın.
# nodetonet.rb
require 'net/http'
require 'json'
require 'uri'
TOKEN = ENV.fetch('NTN_TOKEN')
def create_proxy(subdomain, target_port, target_host: '127.0.0.1')
uri = URI('https://nodetonet.com/api/v1/proxies')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new(uri)
req['Authorization'] = "Bearer #{TOKEN}"
req['Content-Type'] = 'application/json'
req.body = {
subdomain: subdomain,
target_host: target_host,
target_port: target_port,
}.to_json
res = http.request(req)
raise "HTTP #{res.code}: #{res.body}" unless res.is_a?(Net::HTTPSuccess)
JSON.parse(res.body)
end
if __FILE__ == $PROGRAM_NAME
puts create_proxy('alice-dev', 3000)['url']
end
5 · Ölçeklenen hata yönetimi
Yukarıdaki DIY istemciler 2xx olmayan durumda hata çıkarır ama yeniden denemez. Bunları production'da kullanmaya başladığınızda çağrıyı üstel geri-çekimli bir yeniden denemeye sarın: 409 subdomain'in kullanımda olduğu anlamına gelir (yeniden üretin), 429 hız-sınırı (geri çekilin), 5xx geçici (en fazla üç kez yeniden deneyin). 401'i kalıcı hata olarak değerlendirin — token'ınız yanlış veya iptal edilmiş demektir.
# Python — yeniden deneme yardımcısı
import time
def create_with_retry(sub, port, attempts=3):
for i in range(attempts):
try:
return create_proxy(sub, port)
except requests.HTTPError as e:
code = e.response.status_code
if code == 409:
sub = f"{sub}-{int(time.time()) % 1000}"
elif code in (429, 500, 502, 503, 504):
time.sleep(2 ** i)
else:
raise
raise RuntimeError("yeniden denemeler sonunda vazgeçildi")
Production kalitesinde hata yönetiminin tünel yaşam döngüsüyle birlikte tam çalışan bir örneği için Python'da programatik tünel oluşturma'ya bakın. Proxy'leri production otomasyonunda sağlıklı tutmaya ilişkin operasyonel ipuçları için tünel sağlığınızı izleme'ye göz atın.
6 · OpenAPI spec'inden typed istemci üretme
Yukarıda kapsanmayan bir dile ihtiyacınız varsa — Java, C#, Swift, Kotlin, Rust, PHP — /openapi.json adresinde yayınladığımız spec'e karşı openapi-generator kullanın. Generator modeller, istek oluşturucular ve temel hata yönetimiyle eksiksiz bir typed istemci üretir:
npx @openapitools/openapi-generator-cli generate -i https://nodetonet.com/openapi.json -g python -o ./nodetonet-istemci
python yerine generator'ın desteklediği herhangi bir hedefi koyun. Üretilen kod ayrıntılı ama doğru; resmi SDK'yı beklerken IDE otomatik tamamlama ve istek-şekli doğrulaması sağlar.
7 · Resmi SDK'lar yol haritasında
REST API kanonik arayüzdür ve öyle kalacak. SDK'lar üstüne konan kolaylıklardır: yeniden deneme, sayfalama, yapılandırılmış hatalar ve IDE'nin istek şeklini tamamlaması. Şu sırayla yayınlıyoruz:
- Python —
pip install nodetonet, 2026 3. çeyrek. - Node.js / TypeScript —
npm i nodetonet, 2026 3. çeyrek (typed, ESM + CJS). - Go —
go get github.com/nodetonet/sdk-go, 2026 4. çeyrek. - Ruby —
gem install nodetonet, 2026 4. çeyrek.
Yukarıdaki DIY sarıcılardan resmi SDK'lara geçiş tek satırlık bir import değişikliği olacak — fonksiyon ve alan adları kasıtlı olarak hizalı tutuldu. İlerlemeyi takip etmek için değişiklik günlüğü ve yol haritası'na bakın.
İlgili kaynaklar
- REST API: ilk çağrınız — herhangi bir kod yazmadan önce curl ile adım adım yönlendirme.
- API anahtarınızı anlama — kapsamlar, rotasyon ve güvenlik pratiği.
- Python'da programatik tünel oluşturma — yaşam döngüsü yönetimiyle daha uzun gerçek dünya örneği.
- Tünel sağlığınızı izleme — production için yoklama ve webhook örüntüleri.
- IP değişim olayları için webhook'lar — proxy IP'si değiştiğinde olay güdümlü otomasyon.
- HTTP tünelleri ve mobil proxy'ler — API aracılığıyla oluşturacağınız iki ana kaynak.
- Proxy denetleyici aracı — proxy'yi uygulamanıza teslim etmeden önce canlı olup olmadığını doğrulayın.
- Agent uygulamalarını indirin — API'nin arkasındaki cihazlara güç veren Android ve Windows agent'ları.