Praktický návod

Jak navrhnout produktový feed a jeho automatické aktualizace

Vytvoř verzovaný export, který spotřebitel nikdy nestáhne napůl a jehož čerstvost dokážeš změřit.

25 minut · XML, CSV a cron

Nejdřív stručně

Feed je datový kontrakt, ne pohled na tabulku

Každé pole má definovaný význam, typ, jednotku a pravidlo pro chybějící hodnotu. Stabilní produktové ID, verze formátu a čas generování umožní příjemci změny bezpečně zpracovat.

Velký XML nebo CSV feed zapisuj streamově do dočasného souboru. Publikuj ho až po úplném dokončení a validaci, aby odběratel nikdy neviděl rozpracovaný export.

Připrav si

Definuj spotřebitele a SLA

Jiný kontrakt potřebuje srovnávač cen, marketplace a interní datový sklad.

  • Seznam povinných a volitelných polí včetně stabilního ID, variant, ceny, měny, dostupnosti a URL.
  • Formát XML nebo CSV, znakové kódování UTF-8, desetinný oddělovač, časová zóna a enum hodnoty.
  • Rozhodnutí mezi úplným a inkrementálním exportem včetně reprezentace smazání.
  • Požadovanou frekvenci, maximální stáří, způsob stažení, autentizaci a očekávanou velikost.

Kroky 1 až 3

Generuj, ověř a teprve potom publikuj

Odděl doménový výběr produktů, mapování konkrétního kanálu a technický zápis souboru.

1. Verzuj přesný formát

  1. Každý záznam má stabilní product_id nebo variant_id. Název ani URL nejsou identita.
  2. Cenu serializuj jako přesné desetinné číslo s měnou; čas jako ISO 8601 s časovou zónou. Jednotky uváděj explicitně.
  3. Rozliš chybějící hodnotu, prázdný text a nulu. XML escapuj knihovnou, CSV zapisuj jedním sjednaným delimiterem a quotingem.
  4. Breaking změnu publikuj jako novou verzi endpointu nebo souboru a po přechodné období udrž oba kontrakty.
<feed version="2" generated_at="2026-08-11T10:00:00+02:00">
W3C XML Schema 1.1

2. Exportuj streamově a po dávkách

  1. Produkty čti stabilním keyset stránkováním po dávkách, ne všechny do paměti a ne offsetem nad měnící se tabulkou.
  2. XML zapisuj přes XMLWriter, CSV přes fputcsv. Po každé dávce uvolni ORM entity a průběžně počítej řádky i checksum.
  3. Úplný feed obsahuje aktuální stav. Inkrementální feed má časové okno, pořadí a tombstone pro smazaný produkt.
  4. Kanálové odlišnosti řeš adaptérem nad společným exportním modelem, ne podmínkami rozesetými po jednom generátoru.
$writer->startElement("product");
Oficiální PHP dokumentace XMLWriter

3. Publikuj atomicky a hlídej cron

  1. Piš do unikátního dočasného souboru. Po validaci ho atomicky přejmenuj na cílové jméno; v object storage použij verzovaný objekt a ukazatel.
  2. Vedle feedu publikuj checksum, velikost, počet záznamů a generated_at. Podle potřeby nabídni gzip, ETag a Last-Modified.
  3. Cron chraň distribuovaným nebo databázovým lockem proti překryvu. Každý běh má run ID a omezený čas.
  4. Alertuj na chybějící běh, překročené stáří, neobvyklý pokles řádků, chybu validace i příliš dlouhé generování.
php bin/console app:feed:generate products
Oficiální PHP dokumentace rename

Krok 4

Otestuj kontrakt i publikaci

Kontrola několika hezkých produktů nestačí. Feed musí zvládnout speciální znaky, smazání i přerušený běh.

  1. Validuj hraniční data

    Ověř diakritiku, ampersand, uvozovky, newline v CSV, nulovou cenu, chybějící obrázek a dlouhý popis.

    php bin/phpunit --filter ProductFeed
  2. Přeruš generování uprostřed

    Veřejná URL dál vrací poslední úplný feed; dočasný soubor se po timeoutu bezpečně uklidí.

  3. Vynech plánovaný běh

    Monitoring podle generated_at vyvolá alert a další běh obnoví čerstvý export bez ručního přepisování.

Když to zlobí

Nejčastější chyby

Feed spotřebuje všechnu paměť

Nenačítej celou kolekci ani celý XML dokument. Čti dávky a zapisuj XMLWriterem nebo fputcsv průběžně.

Odběratel někdy stáhne neplatný konec souboru

Zapisuješ přímo do veřejného cíle. Generuj bokem, validuj a potom proveď atomický publish.

Smazané produkty zůstávají u partnera

Inkrementální kontrakt nemá tombstone. Přidej explicitní delete záznam nebo periodický úplný snapshot.

Dva cron běhy přepisují stejný feed

Přidej lock s rozumným TTL, unikátní dočasné názvy a metriku překryvu.

Hotovo

Feed je stabilní, čerstvý a publikovaný celý.

Verzovaný kontrakt, streamový export, atomická výměna a monitoring dávají příjemci předvídatelná data bez rozbitých mezistavů.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.