Süreç İçi API Çağrısı

1.8k görüntülenme Markdown

Zaten kurulumun içinde çalışan kod, HTTP'siz, anahtarsız ve ağ turu olmadan her ucu çağırabilir.

Genel Bakış

Bu dokümandaki her uç örneği dördüncü bir sekme taşır: PHP (Dahili). O sekme aynı HTTP isteğinin kısayolu değil. Aynı kaynağa açılan ikinci bir giriş noktası ve kurulumun içinde yaşayan kod için: bir modül, bir cron işleyicisi, bir kanca dinleyicisi, bir tema.

Kullanma sebebi yalnızca hız değil. Kendi kurulumunuzu HTTP üzerinden çağırmak, kendinize anahtar vermek, o anahtarın istek bütçesini harcamak ve web sunucusunun kendisine erişebilir olmasına bağlı kalmak demektir. Süreç içi çağrıda bunların hiçbiri yok ve tam olarak aynı zarfı döndürür; yanıtı okuduğunuz noktada ikisi birbirinin yerine geçer.

Burası tanımı gereği güvenilen bir bağlam. Kimlik doğrulama, izinler, istek sınırlayıcı, kötüye kullanım koruması, tekrar güvenliği ve istek kaydı HTTP katmanına aittir ve hiçbiri burada çalışmaz. Ne verirseniz çalıştırılır.

Referans

İmza

Kernel::internal($groupAction, $input = [], $query = []): array Static. HTTP çağrısının döndüreceği içeriğin aynısını verir: başarıda ['data' => …, 'meta' => …], başarısızlıkta ['error' => ['code', 'message', 'details'?]]. API düzeyindeki bir hatada istisna fırlatmaz ve hiçbir şey yazdırmaz.
$groupAction Ucun kendi adı, Grup/Eylem — dokümanın ve izin kutusunun kullandığı metnin aynısı. Müşteri adresine ulaşmak için başına client: ekleyin.
$input Hem yol değerlerini hem gövdeyi taşıyan tek düz dizi. Adı rota deseninde bir yer tutucuya karşılık gelen anahtarlar, desen sırasıyla yol değeri olarak ayrılır; geriye kalan her şey istek gövdesi olur.
$query Sorgu dizesi, dizi olarak. Süzgeçler, sıralama, page ve limit buraya girer, $input'a değil.

$input Nasıl Ayrılır

services/{id}/addons gibi bir rotada tek yer tutucu var. ['id' => 5, 'name' => 'Yedek'] vermek 5 değerini yol değeri olarak gönderir ve geriye ['name' => 'Yedek'] gövdesini bırakır. Adresi siz kurmazsınız; rota değişince çağrınız bu yüzden kırılmaz.

Müşteri Adresi

Müşteri adresine yapılan HTTP çağrısı hesabı anahtardan alır. Burada anahtar yok, dolayısıyla hesabın adı verilmelidir: $input içine owner_id koyun ve eylemin başına client: ekleyin. Bu değer gönderimden önce girdiden çıkarılır, yani kaynağa gövde alanı olarak hiç ulaşmaz.

Vermemek tahmin edilmez, reddedilir. Çağrı owner_required döner ve hiçbir şey çalışmaz.

Başarısızlıkta Ne Döner

endpoint_not_found O adreste bu Grup/Eylem adına cevap veren uç yok. Yazım hatası buraya düşer; client: önekiyle çağrılan bir yönetim eylemi de öyle.
owner_required owner_id verilmemiş bir müşteri çağrısı.
validation_failed · not_found · … Kaynağın kendi reddettiği ne varsa, HTTP'dekiyle aynı biçimde ve aynı kodla.
server_error Beklenmedik bir hata. Ayrıntı hata kaydına gider, dönen mesaja değil; kurulum hata ayıklama kipinde değilse.

Örnek

bir modülden, iki adres
use WISECP\Api\Kernel;

// yonetim adresi: sorgu secenekleriyle bir liste
$res = Kernel::internal('Clients/GetClients', [], ['page' => 1, 'limit' => 50, 'status' => 'active']);

if (isset($res['error'])) {
    \Logger::warning('musteri senkronu basarisiz: ' . $res['error']['code']);
    return;
}

foreach ($res['data'] as $client) { /* ... */ }
$more = (int) ($res['meta']['next_page'] ?? 0);

// yol degeri ve govde tek dizide
$upd = Kernel::internal('Clients/UpdateClient', ['id' => 42, 'company_name' => 'Acme Ltd']);

// musteri adresi: hesap tahmin edilmez, adiyla verilir
$me = Kernel::internal('client:Account/GetMe', ['owner_id' => 42]);

Tuzaklar

Burada izin denetlenmez, kendi denetiminizi yapın

HTTP çağıranı, kaynağa ulaşmadan önce anahtarının izinlerine göre süzülür. Süreç içi çağrı hiç süzülmez, çünkü çağıran kurulumun kendisidir. Kodunuz bir kişi adına çalışıyorsa, o kişinin neye yetkili olduğuna çağrıdan önce karar verin ve eylemi ya da hedef hesabı asla bir istek değerine seçtirmeyin.

Modül uçlarına bu yoldan ulaşılamaz

Ad ilk eğik çizgide bölünür ve modül grubu zaten bir tane taşır: Module:Addons/AcmeSync. Bölme yanlış çifti üretir ve çağrı endpoint_not_found döner. Kurulumun içindeki kod, modülün kendi sınıfını ya da operasyonunu doğrudan çağırmalıdır; uç, dışarıdaki çağıranlar için vardır.

İstek kaydına hiçbir şey yazılmaz

API kaydı HTTP trafiğini tutar. Süreç içi çağrı oraya satır bırakmaz; ikisini karıştıran bir entegrasyon operatöre etkinliğinin yalnızca yarısını gösterir. Bir arka plan işinin denetim izine ihtiyacı varsa, kendi izinizi siz yazın.

Demo kipi bunu durdurmaz

Demo koruması yazmaları HTTP katmanında reddeder. Bu yol onun altındadır; demo kipindeki bir kurulumda cron işleyicisi ya da kanca dinleyicisi yazmaya devam eder. Bu bilinçlidir, çünkü kurulumun kendi düzeneği çalışmayı sürdürmek zorundadır. Bir demo, olmaması gereken veriyi gösterdiğinde hatırlamaya değer.

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.