Zum Inhalt springen
prodid

Leitfaden für Publisher

Produkte veröffentlichen

Bei prodid zu veröffentlichen heißt, zwei Dateien ins Web und einen Eintrag ins DNS zu stellen. Auf der eigenen Domain gibt es keine Registrierung und keinen Schlüssel: Die Domain ist der Nachweis, und Sie ändern oder ziehen zurück, was Sie veröffentlichen, indem Sie die Dateien ändern.

Wie veröffentlichen Sie?

Weg 1

Auf der eigenen Domain veröffentlichen

Zwei Dateien und ein DNS-Eintrag. Eine Plattform, die für Händler veröffentlicht, tut dasselbe auf jeder Händlerdomain, sodass jeder Händler seine eigene Identität und seine eigene Vertrauensstufe behält.

0 von 4 Schritten erledigt
x
  1. Das Discovery-Dokument ausliefern

    Eine Datei unter einem festen Pfad, die auflistet, wo Ihre Produkt-Feeds liegen: 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"]
    }
    Das Beispiel aus spec/fixtures/v1/examples/prodid.json, direkt aus der Datei gerendert.
  2. Den Feed ausliefern

    Ein Feed ist NDJSON: ein vollständiges JSON-Objekt pro Zeile, UTF-8, durch Zeilenumbrüche getrennt. Kein Array drumherum, keine Kommas zwischen den Zeilen. So lässt sich ein Feed mit zwei Millionen Produkten Zeile für Zeile streamen, und eine kaputte Zeile kostet Sie nur diese Zeile, nicht den Rest.

    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"}]}
    Drei Varianten eines Produkts aus spec/fixtures/v1/examples/items.ndjson. Sie teilen sich eine group, also baut der Index daraus eine Familie mit drei Varianten.
  3. Die Identität im DNS beanspruchen

    Sobald die Dateien online sind, veröffentlichen Sie einen Eintrag, der Ihre eigene Domain als Host nennt.

    _prodid.acme.example TXT
    _prodid.acme.example. IN TXT "v=prodid0; host=acme.example"
  4. Dem Index die Änderung melden

    Optional. Jede bekannte Domain wird regelmäßig neu gecrawlt; ein Ping zieht nur den nächsten Crawl vor.

    den Index bitten, die Discovery jetzt auszuführen
    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"}

Weg 2

Hosting delegieren, Identität behalten

Viele Hersteller besitzen eine Domain und können keine Datei darauf legen. Der Feed wird anderswo gehostet und die Domain per DNS nachgewiesen, sodass die Identität der Quelle weiter die Domain ist und die Vertrauensstufe weiter verified. Legen Sie bei publish.prodid.org eine Site an, geben Sie Ihre Domain ein, und Sie sehen genau den Eintrag, den Sie hinzufügen müssen; geprüft wird er für Sie.

So sieht es aus

0 von 4 Schritten erledigt
x
  1. Ein Katalog, hochgeladen unter einem gehosteten Slug

    , etwa acme.prodid.org, der sowohl das Discovery-Dokument als auch den Feed ausliefert.

  2. Ein TXT-Eintrag auf Ihrer Domain

    , der diesen Host nennt. Ein Host, nie eine URL, sodass ein Eintrag den Crawler nie auf eine beliebige Adresse richten kann.

    _prodid.acme.example TXT
    _prodid.acme.example. IN TXT "v=prodid0; host=acme.prodid.org"
  3. Ein Dokument, das Ihre Domain zurück nennt.

    DNS sagt mein Dokument liegt dort drüben; das Dokument sagt ich spreche für diese Domain. Ein delegiertes Dokument ohne domain wird abgelehnt: Fehlen gilt nie als Zustimmung, und genau das verhindert, dass jemand einen Eintrag auf den Feed eines anderen richtet.

    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"]
    }
    Aus spec/fixtures/v1/examples/prodid.delegated.json. Der einzige Unterschied zu Weg 1 ist das Feld domain, und hier ist es Pflicht.
  4. Legen Sie Ihre Seite an

    Der gehostete Publisher schreibt domain erst ins Dokument, nachdem er Ihren TXT-Eintrag selbst gesehen hat; es gibt also keinen Moment, in dem ein Dokument eine Domain beansprucht, die nicht darum gebeten hat.

Weg 3

Ohne Domain veröffentlichen

0 von 1 Schritten erledigt
x
  1. Legen Sie Ihre Seite an

    Ein Erzeuger ganz ohne Domain veröffentlicht unter einem gehosteten Slug, <slug>.prodid.org, unter eigenem Namen. Sichern Sie sich einen bei publish.prodid.org. Die Identität der Quelle ist der Slug-Host und die Vertrauensstufe unverified, weil über eine Domain nichts nachgewiesen ist. Die Datensätze sind echte Datensätze: Kennungen, Auflösung, Zuschreibung.

Prüfen Sie Ihre Domain

Fertig mit dem Veröffentlichen? Geben Sie Ihre Domain ein. Der Index wird gebeten, sie jetzt anzusehen, und Sie landen auf seiner Live-Statusseite.

Der nächste Crawl aktualisiert den Status in wenigen Minuten.

Dateien vor dem Ping prüfen

prodid-batch check validiert Ihr Discovery-Dokument und jeden Feed genau so, wie der Index es täte, ohne Token und ohne den Index zu fragen. Es läuft aus einem Klon des Repositorys mit Bun 1.4.4. Geben Sie ihm die Dateien selbst: Ein Pfad auf .json wird als ein Dokument gelesen, jeder andere als NDJSON-Feed.

prüfen, was Sie ausliefern, so wie der Index
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

Eine Datei ohne Problem gibt ok und die Anzahl der Datensätze aus, die der Index daraus übernehmen würde. Sonst gibt es pro Problem eine Zeile im Format items.ndjson:12: message mit der betroffenen Feed-Zeile aus und endet mit einem Exit-Code ungleich null. Es liest die Dateien, nicht Ihr DNS oder Ihren Server; TXT-Eintrag, Content-Type und Cache-Header aus der Liste oben müssen Sie also weiterhin selbst prüfen.

Die Regeln, gegen die ein Datensatz validiert wird, stehen in der Spezifikation, die Schemas liegen unter /spec/schemas/v1, und /spec/fixtures/v1 enthält maschinenlesbare Vektoren, gegen die Sie Ihren Exporter laufen lassen können, bevor jemand ihn crawlt.

Die Spezifikation erscheint nur auf Englisch, und der englische Text ist der maßgebliche.

Stand: Spec v1. Der Index und der gehostete Publisher laufen auf prodid.org. Jeder kann veröffentlichen, auf der eigenen Domain oder gehostet. Die Dateiformate auf dieser Seite sind die, die der Index liest, wenn Sie ihn pingen.

Referenz

prodid ist Open Source. Hilf mit, dass es wächst.

Gib dem Repository einen Stern, damit andere es finden, sag uns, was falsch ist, schick eine Korrektur oder schreib uns hier, ganz ohne GitHub-Konto.