Pular para o conteúdo
prodid

Guia do publicador

Publique seus produtos

Publicar no prodid é colocar dois arquivos na web e um registro no DNS. No seu próprio domínio não há cadastro nem chave para guardar: o domínio é a credencial, e você altera ou retira o que publica alterando os arquivos.

Como vai publicar?

Caminho 1

Publique no seu próprio domínio

Dois arquivos e um registro DNS. Uma plataforma que publica em nome de lojas faz o mesmo no domínio de cada uma, então cada loja mantém a própria identidade e o próprio nível de confiança.

0 de 4 passos concluídos
x
  1. Sirva o documento de descoberta

    Um arquivo, num caminho fixo, listando onde estão seus feeds de produto: 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"]
    }
    O exemplo de spec/fixtures/v1/examples/prodid.json, gerado a partir do próprio arquivo.
  2. Sirva o feed

    Um feed é NDJSON: um objeto JSON completo por linha, UTF-8, separado por quebra de linha. Sem array em volta, sem vírgulas entre as linhas. Assim um feed de dois milhões de produtos é lido linha a linha, e uma linha ruim custa só essa linha, não o resto.

    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"}]}
    Três variantes de um produto, de spec/fixtures/v1/examples/items.ndjson. Elas compartilham um group, então o índice monta com elas uma família de três variantes.
  3. Reivindique a identidade no DNS

    Com os arquivos no ar, publique um registro que nomeie o seu próprio domínio como host.

    _prodid.acme.example TXT
    _prodid.acme.example. IN TXT "v=prodid0; host=acme.example"
  4. Avise o índice da mudança

    Opcional. Todo domínio conhecido é rastreado de novo numa agenda, e um ping só antecipa o próximo rastreamento.

    pedir ao índice para rodar a descoberta agora
    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"}

Caminho 2

Delegue a hospedagem, mantenha a identidade

Muitos fabricantes têm um domínio e não conseguem colocar um arquivo nele. O feed fica hospedado em outro lugar e o domínio é provado por DNS, então a identidade da fonte continua sendo o domínio e o nível de confiança continua verified. Crie um site em publish.prodid.org, informe seu domínio e ele mostra o registro exato a adicionar e o verifica para você.

Como fica

0 de 4 passos concluídos
x
  1. Um catálogo enviado a um slug hospedado

    , digamos acme.prodid.org, que serve tanto o documento de descoberta quanto o feed.

  2. Um registro TXT no domínio que é seu

    , nomeando esse host. Um host, nunca uma URL, então um registro nunca consegue mandar o rastreador para um endereço qualquer.

    _prodid.acme.example TXT
    _prodid.acme.example. IN TXT "v=prodid0; host=acme.prodid.org"
  3. Um documento que nomeia o seu domínio de volta.

    O DNS diz meu documento está lá; o documento diz eu falo por esse domínio. Um documento delegado sem domain é rejeitado: ausência nunca é lida como consentimento, e é isso que impede alguém de apontar um registro para o feed de outra pessoa.

    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"]
    }
    De spec/fixtures/v1/examples/prodid.delegated.json. A única diferença para o caminho 1 é o campo domain, e aqui ele é obrigatório.
  4. Crie o seu site

    O publicador hospedado só escreve domain no documento depois de ver o seu registro TXT ele mesmo, então não existe um momento em que um documento reivindica um domínio que não pediu isso.

Caminho 3

Publique sem domínio

0 de 1 passos concluídos
x
  1. Crie o seu site

    Um produtor sem domínio nenhum publica num slug hospedado, <slug>.prodid.org, com o próprio nome. Reserve um em publish.prodid.org. A identidade da fonte é o host do slug e o nível de confiança é unverified, porque nada foi provado sobre um domínio. Os registros são registros de verdade: identificadores, resolução, atribuição.

Verifique o seu domínio

Terminou de publicar? Introduza o seu domínio. O índice é solicitado a analisá-lo agora e você chega à página de estado em tempo real.

O próximo rastreamento atualiza o estado em poucos minutos.

Confira seus arquivos antes do ping

prodid-batch check valida seu documento de descoberta e cada feed exatamente como o índice faria, sem token e sem perguntar nada ao índice. Ele roda a partir de um clone do repositório com Bun 1.4.4. Passe os próprios arquivos: um caminho terminado em .json é lido como um documento, qualquer outro como feed NDJSON.

valide o que você serve, como o índice fará
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

Um arquivo sem problemas imprime ok e o número de registros que o índice tiraria dele. Senão, imprime uma linha por problema, como items.ndjson:12: message com a linha do feed onde está, e sai com código diferente de zero. Ele lê os arquivos, não o seu DNS nem o seu servidor, então o registro TXT, o content type e os cabeçalhos de cache da lista acima continuam sendo seus para conferir.

As regras contra as quais um registro é validado estão na especificação, os schemas são servidos em /spec/schemas/v1, e /spec/fixtures/v1 tem vetores legíveis por máquina para testar seu exportador antes que alguém o rastreie.

A especificação é publicada apenas em inglês, e o texto em inglês é o normativo.

Status: Spec v1. O índice e o publicador hospedado rodam em prodid.org. Qualquer pessoa pode publicar, no próprio domínio ou hospedado. Os formatos de arquivo desta página são os que o índice lê quando você dá ping nele.

Referência

O prodid é código aberto. Ajude-o a crescer.

Dê uma estrela ao repositório para que outros o encontrem, conte o que está errado, envie uma correção ou escreva para nós aqui, sem conta no GitHub.