Sunucu Taraflı Render API

Basmaya hazır HTML döndüren sunucudan sunucuya endpoint

Sunucu taraflı render endpoint'i, panelde hazırlanmış zenginleştirme içeriğini basmaya hazır HTML olarak döndürür. Kendi uygulama sunucunuzdan çağırırsınız; çıktıyı şablonunuza olduğu gibi yazarsınız.

Kavramsal anlatım ve panel tarafı: Sunucu Taraflı Render.

Neden hazır HTML

Diğer public endpoint'ler ham veri döndürür ve işlemeyi widget yapar: token yerleştirme, HTML temizleme, CSS kapsamlama. Sunucu tarafında bu üç adımı size yaptırmak üç ayrı güvenlik açığı davetiyesi olurdu — şablonda |safe, temizlenmemiş markup, kapsamlanmamış CSS.

Bu yüzden endpoint son hâli döndürür: token'lar yerleşmiş, izin listesine göre temizlenmiş, CSS blok kapsamına alınmış.

Dönen HTML'i ikinci bir sanitizer'dan geçirmeyin

İçerik zaten temizlendi. Genel amaçlı bir sanitizer data-selwise-* niteliklerini siler; widget bloğu tanıyamaz, sayfada olduğunu bilmez ve ikinci bir kopyasını basar. Alışverişçi içeriği iki kez görür, arama motoru kopya içerik görür.

Kimlik doğrulama

Diğer public endpoint'ler güvenliği doğrulanmış domain'den alır. Bu endpoint almaz: sunucudan gelen bir isteğin Origin başlığı yoktur, dolayısıyla domain doğrulaması yapılamaz.

Bunun yerine site API anahtarı ister — her istekte, başlığın varlığından bağımsız olarak:

GET /api/v1/public/sites/:siteKey/ssr/enrichments?code=ABC-1&slots=urun-aciklama-alti
x-selwise-api-key: swpk_live_...

Anahtarı Kanallar ekranındaki anahtar simgesinden, Kullanım amacı olarak Sunucu taraflı render seçerek oluşturun.

ssr_read, mobil SDK'nın kullandığı mobile_read ile aynı torbada değildir ve bu bilinçli: SSR anahtarı sizin uygulama sunucunuzda yaşar, dağıtım hattınızdan, CI günlüklerinizden ve imajlarınızdan geçer. Mobil anahtarlar mobile_write ile eşleşerek verilir — sızan bir SSR anahtarının hiçbir şey yazamaması gerekir.

YanıtAnlamı
401Başlık yok. Bir şey sunmadınız
403Anahtar geçersiz, iptal edilmiş veya ssr_read kapsamı yok
404siteKey bulunamadı
429Hız sınırı. Retry-After başlığına bakın

Hız sınırı

Anahtar başına, IP başına değil — varsayılan 6000 istek/dakika.

Sebebi doğrudan sizinle ilgili: diğer public endpoint'leri alışverişçilerin tarayıcıları çağırır, yani bir IP kabaca bir ziyaretçidir. SSR çağrısını sizin sunucularınız yapar; bütün mağaza trafiği birkaç adresten çıkar. IP başına sayılsaydı yoğun bir mağaza paylaşılan public kovayı saniyeler içinde tüketir ve widget'ınızı, event akışınızı ve aramanızı da beraberinde durdururdu.

Yanıt X-RateLimit-Limit ve X-RateLimit-Remaining başlıklarını taşır.

İstek

GET /api/v1/public/sites/:siteKey/ssr/enrichments
ParametreZorunluAçıklama
codeEvetÜrün kodu. sku, item_code veya sepetin kabul ettiği kod — üçü de katalogda çözülür
slotsEvetYuva adları. Virgülle ayrılmış (a,b) veya tekrarlı parametre (slots=a&slots=b). En fazla 10

İki yazım da kabul edilir çünkü ikisi de doğal olarak yazılan biçimdir: Django'nun urlencode çıktısı tekrarlı, elle kurulan bir Next.js URL'i virgüllü olur.

Yanıt

{
  "v": "m3k1p.4",
  "mode": "anonymous",
  "slots": {
    "urun-aciklama-alti": {
      "html": "<div data-selwise-root=\"true\" ...>...</div>",
      "assignmentIds": ["8f3a..."]
    },
    "sepet-ustu": { "html": "", "assignmentIds": [] }
  },
  "css": "[data-selwise-enrichment=\"...\"] .spec-table{...}",
  "meta": {
    "code": "ABC-1",
    "resolved": true,
    "renderedAt": "2026-09-10T09:12:00.000Z"
  }
}
AlanNe için
vİçerik sürüm damgası. Her blokta da nitelik olarak yazılır; widget bununla bayat önbelleği yakalar
modeŞu an her zaman anonymous: yanıtta kişiye göre değişen hiçbir şey yok, yani sayfa önbelleğine yazılabilir
slotsİstenen her yuva burada bulunur. İçeriği olmayanlar boş dize taşır, anahtar hiç eksilmez
cssRendere giren blokların kapsamlanmış stilleri, tekilleştirilmiş. Sayfaya bir kez basın
meta.resolvedKodun katalogda bulunup bulunmadığı. false ise içerik yine gelir, yalnızca ürün token'ları boş kalır

css alanının ayrı olması zorunlu: zenginleştirme izin listesi style etiketini yasaklar, yani markup'ın içine gömülü CSS zaten silinir. Stil blok kapsamına alınmış olduğu için head erişiminiz yoksa içeriğin yanına da basabilirsiniz.

Önbellekleme

Yanıt şu başlıklarla gelir:

Cache-Control: public, max-age=60, stale-while-revalidate=600
ETag: W/"..."
Vary: x-selwise-api-key

ETag'i saklarsanız tekrar render bir gövde yerine 304 maliyetine iner. max-age kasten kısa: bu HTML sizin sayfanızın içine girdiği anda bizim önbelleğimizin ulaşamayacağı bir yere geçer, ve panelde yapılan bir düzenleme oraya yetişemez.

Zaman aşımı ve fail-open

Çağrıyı kısa bir zaman aşımıyla yapın (önerilen 400 ms) ve hatayı yutun. Merchant'ın ürün sayfası bizim yüzümüzden beklememeli.

Bozulma merdiveni şu sırayla iner ve hiçbir basamak diğerini beklemez:

SSR başarılı        → içerik ilk baytta, crawler görür, widget ölçümü devralır
SSR başarısız       → şablon hiçbir şey basmaz → widget normal yoldan basar
widget de yoksa     → sayfa mağazanın kendi hâliyle çıkar, hiçbir şey kırılmaz

Hazır parçalar bunu kendi içinde yapar: Akinon entegrasyon kiti.

Ne dönmez

Kural türüNeden dışarıda
Test modundaki kurallarÖnbelleğe donan test içeriği herkese gider ve mağazadaki test bayrağı hiç sorulmaz
Segment hedefli kurallarKişiye göre değişen bir cevaptır; paylaşılan bir önbellekte bir ziyaretçinin segmenti herkese yapıştırılır
Yuva adı olmayan kurallarAdresi yoktur. Yalnızca tarayıcıda yaşar
Nerede oluşturulur alanı Yalnızca tarayıcı olan kurallarMerchant öyle seçmiş

Boyut sınırı

Bir yanıtın markup'ı en fazla 256 KB taşır. Sınıra ulaşıldığında yanıt kural sınırında kesilir: ilk kurallar gelir, sınırı aşan atlanır. Bu HTML sizin sayfanızın içinde her ürün görüntülemesinde taşındığı için sınır bir formalite değil.

Arama ve öneriler

Arama ve öneri endpoint'leri de sunucudan çağrılabilir; ikisi de JSON döndürür ve markup üretmez — liste şablonu sizin tasarımınızdır, bizim basacağımız markup orada yabancı durur. Bkz. Public API.

Öneri şeritlerinin sunucuda HTML olarak oluşturulması ayrı bir çalışmadır ve henüz yayında değil.

Son güncelleme: 10 Eylül 2026

Bu sayfa yardımcı oldu mu?