Hizmet Araçları

1.7k görüntülenme Markdown

Hizmetin sağlayıcı panelindeki araçları çalıştıran, modül metodu çağıran ve giriş bağlantısı üreten beş uç.

Genel Bakış

Araçlar, hizmetin sağlayıcı panelindeki işleri API üzerinden yapmanızı sağlar: veritabanı açmak, e-posta hesabı eklemek, dosyalara bakmak. Panelin gördüğü verinin aynısını, HTML yerine ham hâlde alırsınız.

Araçlar yalnız barındırma ve sunucu hizmetlerinde vardır. Alan adı hizmetlerinin kendi uçları, özel ürünlerin ise araç sistemi yerine modül metodu yolu vardır — güç işlemleri, konsol bilgisi ve benzeri şeyler oradan çağrılır.

Referans

Araçları Listeleme

get/api/v1/admin/services/{id}/tools
Services/GetServiceTools admin barındırma ve sunucu

Hizmetin modülünün sunduğu araçları ve her birinin hangi işlemleri kabul ettiğini döndürür.

Dönen alanlar data[] — 5
keystringAracın anahtarı. Diğer uçlar bunu adreste kullanır.
groupstringAracın grubu.
labelstringGörünen etiket.
iconstringİkon sınıfı.
capabilitiesstring[]Aracın kabul ettiği işlemler. Listede olmayan bir işlemi çağırmak reddedilir.
Hatalar 3
not_found404Hizmet bulunamadı.
tools_not_supported422Bu hizmet tipi araç sunmuyor. Alan adı ve özel ürünlerde araç yoktur.
module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/services/506/tools' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/services/506/tools', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/tools');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Islemi denemeden once yetenegi okuyun: her modul her araci ayni olcude desteklemez.
$tools = Api::Services()->GetServiceTools(['id' => 506])['data'];

foreach ($tools as $tool) {
    $canCreate = in_array('create', $tool['capabilities'], true);
}
Yanıt
{
  "data": [
    {
      "key": "databases",
      "group": "databases",
      "label": "Databases",
      "icon": "bi bi-database",
      "capabilities": ["list", "create", "delete"]
    },
    {
      "key": "email-accounts",
      "group": "email",
      "label": "Email Accounts",
      "icon": "bi bi-envelope",
      "capabilities": ["list", "create", "edit", "delete"]
    }
  ]
}
{
  "error": {
    "code": "tools_not_supported",
    "message": "This service type does not expose tools."
  }
}

Araç Verisini Okuma

get/api/v1/admin/services/{id}/tools/{tool}
Services/GetServiceToolData admin şekil modülden gelir

Aracın sağlayıcıdan okuduğu veriyi ham hâliyle döndürür.

Sorgu parametreleri 2
actionstringModüle iletilecek alt işlem. Varsayılan, aracın giriş görünümüdür.
*mixedVerdiğiniz diğer tüm sorgu parametreleri olduğu gibi modüle geçer.
Dönen alanlar data
datamixedAracın kendi verisi. Şekli tamamen modüle ve araca bağlıdır; sabit bir şema yoktur.
Hatalar 5
not_found404Araç bulunamadı ya da desteklenmiyor.
tools_not_supported422Bu hizmet tipi araç sunmuyor. Alan adı ve özel ürünlerde araç yoktur.
module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.
tool_required422Araç anahtarı boş.
tool_data_failed500Modül veriyi getiremedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/services/506/tools/databases' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/services/506/tools/databases', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/tools/databases');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Panel HTML render eder, API HAM veri dondurur: sekil moduller arasinda degisir.
$response = Api::Services()->GetServiceToolData(
    ['id' => 506, 'tool' => 'databases'],
);
Yanıt
{
  "data": {
    "databases": [
      {
        "name": "user_app",
        "size": 50855321,
        "tables": 42,
        "users": ["user_admin"]
      }
    ],
    "users": ["user_admin"],
    "prefix": "user_"
  }
}

Araç İşlemi Çalıştırma

post/api/v1/admin/services/{id}/tools/{tool}/{action}
Services/RunServiceToolAction admin sunucuda çalışır

Araç üzerinde bir işlem çalıştırır. Gövde alanlarını modülün kendi doğrulaması denetler. DNS kaydı düzenlemesi (dns-zone-editor/edit) yalnız gönderdiğinizi değiştirir: gönderilmeyen ad, TTL ya da öncelik kaydın mevcut değerini korur.

Gövde *
*mixedİşlemin beklediği alanlar. Ne gerektiğini modül belirler; alanlar temizlenir, doğrulanır ve geçmişe yazılır.
Dönen alanlar data
datamixedModülün işlem sonucu. Genellikle bir durum ve bir mesaj taşır.
Hatalar 4
not_found404Araç bulunamadı ya da desteklenmiyor.
tools_not_supported422Bu hizmet tipi araç sunmuyor. Alan adı ve özel ürünlerde araç yoktur.
module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.
tool_action_failed500Modül işlemi tamamlayamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/tools/databases/create' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"user_app"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/tools/databases/create', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: 'user_app' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/tools/databases/create');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['name' => 'user_app']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Islem gercekten SUNUCUDA calisir: silme cagrilari geri alinamaz.
$response = Api::Services()->RunServiceToolAction(
    ['id' => 506, 'tool' => 'databases', 'action' => 'create'],
    [],
    ['name' => 'user_app'],
);

Modül Metodu Çağırma

post/api/v1/admin/services/{id}/module-method
Services/UseServiceModuleMethod admin izin listesine bağlı

Modülün izin verdiği bir metodu çağırır. Araç sistemi olmayan hizmet tiplerinin yolu budur.

Gövde 2
methodstringzorunluÇağrılacak metodun adı. Yalnız modülün çağrılabilir listesinde olan ya da karşılığı bulunan metotlar çalışır.
*mixedVerdiğiniz diğer alanlar metoda parametre olarak geçer.
Dönen alanlar data — 4
methodstringÇağrılan metot.
redirect_urlstring | nullMetot bir yönlendirme ürettiyse adresi.
resultmixed | nullMetodun dönüş değeri. Yalnız dizi ya da metin dönerse dolar.
outputstring | nullMetodun bastığı çıktı.
Hatalar 5
not_found404Hizmet bulunamadı.
method_required422Metot adı verilmedi.
invalid_method422Metot modülde çağrılabilir değil.
no_module422Hizmete bağlı modül yok.
module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.
module_method_failed500Metot hata fırlattı.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/module-method' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"method":"vnc_info"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/module-method', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ method: 'vnc_info' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/module-method');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['method' => 'vnc_info']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Sonuc uc ayri alanda gelebilir: donus degeri, basilan cikti ya da yonlendirme.
$response = Api::Services()->UseServiceModuleMethod([
    'id'     => 506,
    'method' => 'vnc_info',
]);

$data = $response['data']['result']
    ?? $response['data']['output']
    ?? $response['data']['redirect_url'];
Yanıt
{
  "data": {
    "method": "vnc_info",
    "redirect_url": null,
    "result": { "host": "203.0.113.10", "port": 5901 },
    "output": null
  }
}
{
  "error": {
    "code": "invalid_method",
    "message": "Module method is not callable."
  }
}

Panele Giriş Bağlantısı

post/api/v1/admin/services/{id}/sso
Services/GetServiceSso admin tek tıkla giriş

Hizmetin paneline tek tıkla giriş bağlantısı üretir.

Gövde 1
rootboolYönetici girişi üretir. Varsayılan kapalı; kapalıyken müşterinin hesabına girilir.
Dönen alanlar data — 2
urlstringGiriş bağlantısı.
rootboolYönetici girişi istendi mi.
Hatalar 4
not_found404Hizmet bulunamadı.
sso_not_supported422Modül tek tıkla girişi desteklemiyor.
module_init_failed500Hizmetin modülü başlatılamadı. Mesaj sebebi taşır; yollar kuruluma göreli verilir.
sso_failed500Modül bağlantı üretemedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/sso' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"root":false}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/sso', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ root: false }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/sso');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['root' => false]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Uretilen adres oturum tasir: log'a yazmayin, paylasmayin, kisa surede kullanin.
$response = Api::Services()->GetServiceSso(['id' => 506]);
$url      = $response['data']['url'];

Tuzaklar

Araç işlemi gerçekten sunucuda çalışır

Bu uçlar bir kaydı güncellemez; sağlayıcıya bağlanıp işi orada yaptırır. Silme işlemleri müşterinin verisini gerçekten siler ve geri alınamaz. Bir işlemi denemeden önce araç listesindeki yeteneklere bakın; desteklenmeyen bir işlemi çağırmak reddedilir.

Yanıtın şekli modüle bağlıdır

Araç verisi ham gelir ve şekli modülden modüle değişir: bir barındırma paneli veritabanlarını başka anahtarlarla döndürür, bir diğeri başka. Tek bir modüle bakarak yazılmış ayrıştırma kodu ikinci modülde çalışmaz. Şemayı sabit varsaymayın.

Modül metodu bir izin listesine bağlıdır

Metot adını serbestçe seçemezsiniz: yalnız modülün çağrılabilir olarak işaretlediği ya da bir karşılığı bulunan metotlar çalışır, kalanı invalid_method ile döner. Bu bir güvenlik sınırıdır; modülün her genel metodunu çağırabileceğinizi varsaymayın.

Müşteri kısıtlamaları API'de de geçerlidir

Sunucu üzerinde müşteriye kapatılmış araçlar API çağrılarında da kapalıdır. Panelde yönetici olarak gördüğünüz bir araç, aynı anahtarla API'den erişilemeyebilir; sebebi yetki değil, sunucudaki kısıtlama ayarıdır.

Giriş bağlantısı bir oturum taşır

Üretilen adres tıklandığında oturum açar. Log'a yazmak, bir yere kaydetmek ya da paylaşmak o hesaba erişimi paylaşmak demektir; bağlantıyı geçici bir kimlik bilgisi gibi tutun. Yönetici girişi isteyen çağrı ise panelin kökünü açar, tek bir müşteri hesabını değil.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.