Hizmet Gereksinim Yanıtları

1.6k görüntülenme Markdown

Bir hizmette müşterinin gereksinimlere verdiği yanıtları okuyan, ekleyen, düzenleyen ve silen dört uç.

Genel Bakış

Gereksinim, ürünün sipariş anında sorduğu sorudur; burada o soruların hizmetteki cevapları yönetilir. Soruların kendisi ürün tarafında tanımlanır.

Bir yanıt iki kaynaktan gelir. Tanıma bağlı olanlar ürün gereksinimine bağlıdır ve o tanımın tipini, seçeneklerini ve modül eşlemesini taşır. Serbest olanlar yalnız bir etiket ve içeriktir; sonradan elle eklenir ve modüle geçmez.

Referans

Yanıtları Listeleme

get/api/v1/admin/services/{id}/requirements
Services/GetServiceRequirements admin

Hizmete verilmiş gereksinim yanıtlarının tamamını döndürür.

Dönen alanlar data[] — 8
idintYanıt kaydının kimliği. Güncelleme ve silme bunu kullanır.
requirement_idintBağlı ürün gereksinim tanımının kimliği. Serbest gereksinimde sıfır.
keystringproduct tanımdan gelir, custom serbest eklenmiştir.
namestringGereksinimin adı ya da etiketi.
typestringAlan tipi: text, select, radio, checkbox ya da file.
responsestring | arrayVerilen yanıt. Dosya tipinde dosya nesnelerinden oluşan dizi, diğerlerinde düz metin.
namestringSunucuda saklanan ad.
file_namestringMüşterinin yüklediği özgün ad.
sizeintDosya boyutu, bayt olarak.
pathstringDosyanın saklandığı yol.
response_mkeystringSeçimin modüle geçirilecek karşılığı. Yalnız seçim tiplerinde dolar ve kendiliğinden çözülür.
field_optionsarrayTanımın sunduğu seçenekler.
Hatalar 2
not_found404Hizmet bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/services/506/requirements' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/services/506/requirements', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/requirements');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Services()->GetServiceRequirements(['id' => 506]);

// 'response' tipe gore sekil degistirir: dosyada dizi, digerlerinde metin.
foreach ($response['data'] as $req) {
    $answer = $req['type'] === 'file'
        ? array_column($req['response'], 'file_name')
        : $req['response'];
}
Yanıt
{
  "data": [
    {
      "id": 12,
      "requirement_id": 22,
      "key": "product",
      "name": "Game Name",
      "type": "text",
      "response": "Minecraft",
      "response_mkey": "",
      "field_options": []
    }
  ]
}

Yanıt Ekleme

post/api/v1/admin/services/{id}/requirements
Services/CreateServiceRequirement admin iki gövde şekli

Hizmete gereksinim yanıtı ekler. Tanıma bağlı ya da serbest olabilir.

Gövde — ortak 1
sourcestringHangi gövde şeklinin geçerli olduğu: defined tanıma bağlar, custom serbest ekler. Varsayılan defined.
Gövde — tanıma bağlı 3
requirement_idintzorunluBağlanacak ürün gereksinim tanımının kimliği.
responsestring | arrayYanıt. Seçim tiplerinde tanımdaki seçeneğin kimliği gönderilir, metni değil; çoklu seçimde virgülle ayrılmış liste ya da dizi.
filestringDosya girişi. Tanım dosya tipindeyse bunun yerine bu alan gerekir: base64 veri adresi ya da indirilebilir bağlantı.
Gövde — serbest 4
labelstringzorunluGereksinimin etiketi.
typestringtext ya da file. Varsayılan text; serbest gereksinimde seçim tipleri yoktur.
contentstringMetin yanıtı. Metin tipinde gerekir.
filestringDosya girişi. Dosya tipinde gerekir.
Dönen alanlar data
dataobjectOluşturulan yanıt, 201 ile döner. Liste şemasının bir satırıyla aynıdır.
Hatalar 8
not_found404Hizmet bulunamadı.
requirement_id_required422Tanıma bağlanırken kimlik verilmedi.
definition_not_found422Gereksinim tanımı bulunamadı.
response_required422Yanıt boş.
content_required422Metin boş.
label_required422Etiket boş.
file_invalid422Dosya çözümlenemedi ya da saklanamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/services/506/requirements' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"source":"custom","label":"Server Name","type":"text","content":"srv-01"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/requirements', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    source: 'custom',
    label: 'Server Name',
    type: 'text',
    content: 'srv-01',
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/requirements');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'source'  => 'custom',
        'label'   => 'Server Name',
        'type'    => 'text',
        'content' => 'srv-01',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Secim tipinde SECENEGIN KIMLIGI gonderilir; metni gondermek yanlis kaydeder.
$definition = Api::Products()->GetRequirement(['id' => 22])['data'];
$option     = $definition['langs']['en']['options'][0];

Api::Services()->CreateServiceRequirement([
    'id'             => 506,
    'source'         => 'defined',
    'requirement_id' => 22,
    'response'       => $option['id'],
]);

Yanıtı Güncelleme

patch/api/v1/admin/services/{id}/requirements/{req_id}
Services/UpdateServiceRequirement admin dosya düzenlenemez

Metin tabanlı bir yanıtı değiştirir. Dosya yanıtları düzenlenemez.

Gövde 1
responsestringYeni yanıt. Çoklu seçimde virgülle ayrılmış seçenek kimlikleri.
Dönen alanlar data
dataobjectYanıtın güncel hâli. Liste şemasının bir satırıyla aynıdır; seçim tiplerinde response_mkey yeniden çözülür.
Hatalar 3
not_found404Hizmet ya da gereksinim bulunamadı.
file_not_editable422Dosya gereksinimi düzenlenemez. Silip yeniden eklemeniz gerekir.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/services/506/requirements/12' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"response":"Valheim"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/requirements/12', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ response: 'Valheim' }),
});

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

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Dosya yanitini degistirmenin yolu sil-ve-yeniden-ekle'dir.
Api::Services()->DeleteServiceRequirement(['id' => 506, 'req_id' => 12]);

Api::Services()->CreateServiceRequirement([
    'id'     => 506,
    'source' => 'custom',
    'label'  => 'Contract',
    'type'   => 'file',
    'file'   => 'data:application/pdf;base64,' . base64_encode($pdf),
]);

Yanıtı Silme

delete/api/v1/admin/services/{id}/requirements/{req_id}
Services/DeleteServiceRequirement admin dosya da silinir

Gereksinim yanıtını siler. Dosya tipindeyse yüklenen dosya diskten de kaldırılır.

Dönen alanlar data — 2
deletedboolSilme başarılı mı.
idintSilinen kaydın kimliği.
Hatalar 2
not_found404Hizmet ya da gereksinim bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/services/506/requirements/12' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/services/506/requirements/12', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/506/requirements/12');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Services()->DeleteServiceRequirement([
    'id'     => 506,
    'req_id' => 12,
]);

Tuzaklar

Seçim tipinde metin değil kimlik gönderilir

Açılır liste, tek seçim ve çoklu seçim tiplerinde yanıt olarak tanımdaki seçeneğin kimliği gönderilir. Seçeneğin görünen metnini göndermek hata vermez ama yanlış değeri kaydeder ve modül eşlemesi çözülemez. Kimlikleri ürün gereksinim tanımından okuyun.

Dosya yanıtı düzenlenemez

Güncelleme ucu dosya tipinde file_not_editable döndürür. Bir dosyayı değiştirmenin tek yolu kaydı silip yenisini eklemektir; silme işlemi yüklenen dosyayı diskten de kaldırır, yani eskisi geride kalmaz.

Yanıtın şekli tipe göre değişir

Listede response alanı dosya tipinde dizi, diğer tiplerde düz metin gelir. Tek bir şekil bekleyen kod dosya gereksinimi olan ilk hizmette patlar; okumadan önce type alanına bakın.

Serbest gereksinim modüle geçmez

Serbest eklenen bir gereksinim yalnız kayıtta durur: tanımı olmadığı için modül eşlemesi de yoktur. Cevabın sunucuda bir işe yaraması gerekiyorsa gereksinimi ürün tarafında tanımlayın ve buraya tanıma bağlı olarak ekleyin.

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.