İçeriğe geç
prodid

Yayıncı rehberi

Ürünlerini yayınla

prodid’e yayın yapmak, web’e iki dosya ve DNS’e bir kayıt koymak demek. Kendi alan adında kayıt olunacak bir yer ya da saklanacak bir anahtar yok: kimlik bilgisi alan adının kendisi; yayımladığını dosyaları değiştirerek değiştirir ya da geri çekersin.

Nasıl yayımlayacaksınız?

1. yol

Kendi alan adında yayınla

İki dosya ve bir DNS kaydı. Mağazalar adına yayın yapan bir platform aynı şeyi her mağazanın alan adında yapar; böylece her mağaza kendi kimliğini ve kendi güven seviyesini korur.

4 adımın 0 tanesi tamam
x
  1. Keşif belgesini sun

    Sabit bir yolda, ürün akışlarının nerede olduğunu listeleyen tek bir dosya: https://acme.example/.well-known/prodid.json

    .well-known/prodid.jsonapplication/json
    {
    	"$type": "org.prodid.feed",
    	"version": 1,
    	"publisher": { "name": "Acme Tekstil", "contact": "data@acme.example" },
    	"license": "CC0-1.0",
    	"feeds": ["https://acme.example/prodid/items.ndjson"]
    }
    spec/fixtures/v1/examples/prodid.json örneği, dosyanın kendisinden üretildi.
  2. Akışı sun

    Akış NDJSON’dır: her satırda tam bir JSON nesnesi, UTF-8, satırlar yeni satırla ayrılır. Etrafında dizi yok, satırlar arasında virgül yok. Böylece iki milyon ürünlük bir akış satır satır akar ve bozuk bir satır sana geri kalanı değil yalnızca o satırı kaybettirir.

    prodid/items.ndjsonapplication/x-ndjson
    {"$type":"org.prodid.item","key":"TJ-2041-NVY-M","brand":"Acme","name":"Trail Jacket","lang":"en","group":"TJ-2041","variant":{"color":"navy","size":"M"},"identifiers":[{"scheme":"gtin","value":"09506000134352"},{"scheme":"mpn","value":"TJ-2041-NVY-M"}],"markets":["TR","DE"],"properties":{"material":"100% recycled polyester","madeIn":"TR","weight":{"value":480,"unit":"g"}},"media":[{"url":"https://acme.example/img/tj2041-navy.webp","license":"CC-BY-4.0","kind":"image"}]}
    {"$type":"org.prodid.item","key":"TJ-2041-NVY-L","brand":"Acme","name":"Trail Jacket","lang":"en","group":"TJ-2041","variant":{"color":"navy","size":"L"},"identifiers":[{"scheme":"gtin","value":"09506000134406"},{"scheme":"mpn","value":"TJ-2041-NVY-L"}],"markets":["TR","DE"],"properties":{"material":"100% recycled polyester","madeIn":"TR","weight":{"value":505,"unit":"g"}},"media":[{"url":"https://acme.example/img/tj2041-navy.webp","license":"CC-BY-4.0","kind":"image"}]}
    {"$type":"org.prodid.item","key":"TJ-2041-OLV-M","brand":"Acme","name":"Trail Jacket","lang":"en","group":"TJ-2041","variant":{"color":"olive","size":"M"},"identifiers":[{"scheme":"gtin","value":"09506000134413"},{"scheme":"mpn","value":"TJ-2041-OLV-M"}],"markets":["TR"],"properties":{"material":"100% recycled polyester","madeIn":"TR","weight":{"value":480,"unit":"g"}},"media":[{"url":"https://acme.example/img/tj2041-olive.webp","license":"CC-BY-4.0","kind":"image"}]}
    spec/fixtures/v1/examples/items.ndjson dosyasından tek bir ürünün üç varyantı. Aynı group’u paylaştıkları için dizin bunlardan üç varyantlı tek bir aile kurar.
  3. Kimliği DNS’te sahiplen

    Dosyalar yayına girdikten sonra host olarak kendi alan adını gösteren tek bir kayıt yayınla.

    _prodid.acme.example TXT
    _prodid.acme.example. IN TXT "v=prodid0; host=acme.example"
  4. Dizine değiştiğini bildir

    İsteğe bağlı. Bilinen her alan adı bir takvime göre yeniden taranır; ping yalnızca bir sonraki taramayı öne çeker.

    dizinden keşfi şimdi çalıştırmasını iste
    curl -X POST https://prodid.org/ping \
      -H 'content-type: application/json' \
      -d '{"domain": "acme.example"}'
    
    HTTP/1.1 202 Accepted
    Content-Type: application/json
    
    {"status":"accepted"}

2. yol

Barındırmayı devret, kimliği koru

Pek çok üreticinin bir alan adı vardır ama ona dosya koyamaz. Akış başka bir yerde barındırılır ve alan adı DNS ile kanıtlanır; böylece kaynak kimliği yine alan adıdır ve güven seviyesi yine verified olur. publish.prodid.org’da bir site oluştur, alan adını gir; eklemen gereken kaydı birebir gösterir ve senin için denetler.

Nasıl görünür

4 adımın 0 tanesi tamam
x
  1. Barındırılan bir slug’a yüklenmiş bir katalog

    , örneğin acme.prodid.org; hem keşif belgesini hem akışı sunar.

  2. Sahip olduğun alan adında, o host’u gösteren tek bir TXT kaydı.

    URL değil host; böylece bir kayıt tarayıcıyı asla rastgele bir adrese yönlendiremez.

    _prodid.acme.example TXT
    _prodid.acme.example. IN TXT "v=prodid0; host=acme.prodid.org"
  3. Alan adını geri gösteren bir belge.

    DNS belgem şurada der; belge o alan adı adına konuşuyorum der. domain içermeyen devredilmiş bir belge reddedilir: yokluk asla onay sayılmaz; kimsenin başkasının akışına kayıt yönlendirememesinin nedeni de budur.

    acme.prodid.org/.well-known/prodid.jsonapplication/json
    {
    	"$type": "org.prodid.feed",
    	"version": 1,
    	"domain": "acme.example",
    	"publisher": { "name": "Acme Tekstil", "contact": "data@acme.example" },
    	"license": "CC0-1.0",
    	"feeds": ["https://acme.prodid.org/feeds/items.ndjson"]
    }
    spec/fixtures/v1/examples/prodid.delegated.json dosyasından. 1. yoldan tek farkı domain alanı ve burada zorunlu.
  4. Sitenizi oluşturun

    Barındırılan yayıncı domain’i belgeye ancak TXT kaydını kendisi gördükten sonra yazar; böylece bir belgenin, bunu istememiş bir alan adını sahiplendiği bir an olmaz.

3. yol

Alan adı olmadan yayınla

1 adımın 0 tanesi tamam
x
  1. Sitenizi oluşturun

    Hiç alan adı olmayan bir üretici, kendi adıyla, barındırılan bir slug’da yayın yapar: <slug>.prodid.org. publish.prodid.org’dan bir tane al. Kaynak kimliği slug host’udur ve güven seviyesi unverified, çünkü bir alan adıyla ilgili hiçbir şey kanıtlanmamıştır. Kayıtlar gerçek kayıtlardır: tanımlayıcılar, çözümleme, kaynak gösterme.

Alan adınızı kontrol edin

Yayınlamayı bitirdiniz mi? Alan adınızı girin. Dizinden şimdi bakması istenir ve canlı durum sayfasına gidersiniz.

Sonraki tarama durumu birkaç dakika içinde günceller.

Ping atmadan önce dosyalarını denetle

prodid-batch check, keşif belgeni ve her akışı tam olarak dizinin yapacağı gibi doğrular; token olmadan ve dizine hiçbir şey sormadan. Bun 1.4.4 ile deponun bir kopyasından çalışır. Dosyaların kendisini ver: .json ile biten bir yol tek bir belge, diğer her yol bir NDJSON akışı olarak okunur.

sunduğunu, dizinin yapacağı gibi doğrula
git clone https://github.com/productdevbook/prodid
cd prodid
bun install --frozen-lockfile
curl -fsSo prodid.json https://acme.example/.well-known/prodid.json
curl -fsSo items.ndjson https://acme.example/prodid/items.ndjson
bun apps/batch/src/cli.ts check prodid.json items.ndjson

prodid.json: ok, 1 record
items.ndjson: ok, 3 records

Sorunsuz bir dosya ok ve dizinin ondan alacağı kayıt sayısını yazar. Aksi halde her sorun için, bulunduğu akış satırıyla birlikte items.ndjson:12: message biçiminde bir satır yazar ve sıfır olmayan bir kodla çıkar. DNS’ini ya da sunucunu değil dosyaları okur; yani yukarıdaki listedeki TXT kaydı, içerik türü ve önbellek başlıkları yine senin denetlemen gereken şeyler.

Bir kaydın doğrulandığı kurallar şartnamede, şemalar /spec/schemas/v1 adresinde; /spec/fixtures/v1 ise biri taramadan önce dışa aktarıcını karşısında çalıştırabileceğin, makinenin okuyabildiği vektörleri tutar.

Şartname yalnızca İngilizce yayımlanır ve bağlayıcı metin İngilizce olanıdır.

Durum: Şartname v1. Dizin ve barındırılan yayıncı prodid.org üzerinde çalışıyor. Herkes kendi alan adında ya da barındırılan olarak yayın yapabilir. Burada anlatılan dosya biçimleri, ping attığında dizinin okuduğu biçimlerdir.

Başvuru

prodid açık kaynak. Büyümesine yardım et.

Başkaları da bulsun diye depoyu yıldızla, yanlış olanı bize bildir, bir düzeltme gönder ya da GitHub hesabın olmadan buradan bize yaz.