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.
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
- Každý záznam má stabilní product_id nebo variant_id. Název ani URL nejsou identita.
- Cenu serializuj jako přesné desetinné číslo s měnou; čas jako ISO 8601 s časovou zónou. Jednotky uváděj explicitně.
- Rozliš chybějící hodnotu, prázdný text a nulu. XML escapuj knihovnou, CSV zapisuj jedním sjednaným delimiterem a quotingem.
- 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
- 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.
- 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.
- Úplný feed obsahuje aktuální stav. Inkrementální feed má časové okno, pořadí a tombstone pro smazaný produkt.
- 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
- 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.
- Vedle feedu publikuj checksum, velikost, počet záznamů a generated_at. Podle potřeby nabídni gzip, ETag a Last-Modified.
- Cron chraň distribuovaným nebo databázovým lockem proti překryvu. Každý běh má run ID a omezený čas.
- 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.
-
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 -
Přeruš generování uprostřed
Veřejná URL dál vrací poslední úplný feed; dočasný soubor se po timeoutu bezpečně uklidí.
-
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ů.