<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.rettungsdienstblog.eu/index.php?action=history&amp;feed=atom&amp;title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje</id>
	<title>Kdy REST ničí výkon a GraphQL zbytečně komplikuje - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rettungsdienstblog.eu/index.php?action=history&amp;feed=atom&amp;title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje"/>
	<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;action=history"/>
	<updated>2026-10-13T03:27:10Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Rettungsdienst-Wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.rettungsdienstblog.eu/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;diff=455635&amp;oldid=prev</id>
		<title>EvaS592830 am 11. Oktober 2026 um 15:05 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;diff=455635&amp;oldid=prev"/>
		<updated>2026-10-11T15:05:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 11. Oktober 2026, 15:05 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Zavedení DevOps začíná u verzovacího systému&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Veškerý kód&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;konfigurace i skripty pro infrastrukturu musí být &lt;/del&gt;v &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jednom repozitáři&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Bez toho se nedá mluvit o automatizaci&lt;/del&gt;, protože &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;neexistuje jediný zdroj pravdy. Druhým krokem &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;automatizovaný build a testy. Každá změna projde stejnou sadou kontrol&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;takže &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;chyby odhalí dřív, než se dostanou k uživatelům. Teprve potom má smysl řešit nasazování&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Vyhýbejte &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;neurčitým slovům&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která nic neříkají&lt;/del&gt;: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;„oprava chyby&amp;quot;&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;„vylepšení&amp;quot;&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;„různé&amp;quot;&lt;/del&gt;. Pokud &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;opravdu nevíte&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;co změna dělá&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;je to signál&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že jste ji neměli commitovat&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Stejně tak nedávejte do zprávy odkazy na interní systém&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jehož význam za rok zmizí&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Místo čísla tiketu napište větu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která popisuje podstatu – číslo může být doplněk&lt;/del&gt;, ne &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;náhrada sdělení&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kdy &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vyplatí pustit aplikaci proti sob&lt;/del&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kultura je důležitější než technologie&lt;/del&gt;. Pokud &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vývojář dostane za úkol opravit incident ve tři ráno&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;naučí se psát opatrný kód&lt;/del&gt;. Pokud &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;provozní tým vidí&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jak změny vznikají&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přestane &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vnímat jako cizí zásahy. Společná odpovědnost se nedá nařídit&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale dá se podpořit tím, že se obě role potkávají u jedné tabule a u jednoho problému&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;U větších systémů se oba přístupy běžně kombinují. REST zůstává pro interní služby a veřejné rozhraní, GraphQL se nasadí jako vrstva pro klientské aplikace. Na co si dát pozor: autorizace musí být v GraphQL řešená na úrovni polí, ne jen na vstupním bodě. Chybí-li kontrola u konkrétních atributů, může klient získat data, která mu nepatří. Stejně tak u REST nepodceňujte verzování. Změna struktury odpovědi bez nové verze rozbije všechny stávající klienty.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Užitečný zvyk je číst si vlastní zprávu před odesláním &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;představit si&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že ji vidíte poprvé bez kontextu. Pokud nedokážete říct, čeho se změna týká &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jaký problém řeší, přepište ji&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Držte jednotný jazyk a čas – buď rozkazovací způsob („oprav&amp;quot;&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;„přidej&amp;quot;), nebo oznamovací, ale nemíchejte to. Konzistence je &lt;/del&gt;to, co &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dělá historii čitelnou jako celek, ne jednotlivé řádky&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Většina vývojářů píše commit zprávy tak&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jako by je nikdy neměl číst nikdo jiný než oni sami – &lt;/del&gt;a to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;je přesně ten problém. Za půl roku narazíte na stejný kód, otevřete historii a místo odpovědi najdete „oprava&amp;quot;, „fix&amp;quot; &lt;/del&gt;nebo &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;„update&amp;quot;. Ztratíte dvacet minut hledáním&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;co &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tehdy vlastně změnilo a proč&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Přitom stačí pár návyků, které zaberou o pár sekund víc při commitu, ale ušetří hodiny při dohledávání.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Prvním krokem &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ujasnit si, kdo co vlastně řídí. U externího dodavatele nemůžete přímo nařizovat lidem, co mají dělat. Můžete ale ovlivnit prostředí, ve kterém pracují. Sepište si se zástupci dodavatele tzv. pracovní dohodu: kdo je produktový vlastník, kdo technický vedoucí, jak často se scházíte a co se stane, když se priority rozjedou&lt;/del&gt;. Bez &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;toho se každá retrospektiva zvrhne v hádku o tom&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;čí úkol je důležitější&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jedna změna&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jeden commit Nejčastější chyba je slepení nesouvisejících úprav do jednoho commitu. Opravíte překlep v textu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přidáte novou funkci a ještě upravíte konfiguraci – a výsledkem je změť&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kterou nelze zpětně rozumně rozdělit. Když pak potřebujete vrátit jen opravu překlepu, musíte revertovat &lt;/del&gt;i &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;funkci&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rozdělte práci na menší celky ještě před commitem&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;klidně pomocí příkazu&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;který do indexu přidá jen vybrané části souboru. Menší commity &lt;/del&gt;se &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;snáz čtou, snáz se z nich staví historie a snáz se v nich hledá&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Základ je popsat proč, ne co. Samotný diff ukazuje, které řádky se změnily, takže psát „změněna podmínka &lt;/del&gt;v &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cyklu&amp;quot; je zbytečné. Užitečná je informace, kterou z kódu nevyčtete: „cyklus končil o jedna dřív a poslední záznam se neukládal&amp;quot;. První řádek držte krátký, do zhruba padesáti znaků&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zbytek rozveďte v těle zprávy po prázdném řádku. Tím získáte přehled v logu &lt;/del&gt;i &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;detail pro toho, kdo bude pátrat po příčině.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Konkrétní postup pro malý tým vypadá takto: sjednoťte &lt;/del&gt;repozitář, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nastavte build, který se spustí při každé změně, přidejte testy, které běží automaticky, a vytvořte jeden skript pro nasazení do testovacího prostředí&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Teprve když to funguje spolehlivě&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rozšiřte ho i &lt;/del&gt;na &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;produkci. Součástí musí být možnost vrátit změnu zpět. Bez rollbacku je každé nasazení riskantní a tým ho &lt;/del&gt;bude &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;odkládat&lt;/del&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktické zásady pro GraphQL: nastavte maximální hloubku dotazu, zakažte příliš drahé operace, měřte dobu jednotlivých resolverů a logujte pomalé dotazy. U REST zase hlídejte, aby se endpointy nezačaly množit podle obrazovek. Jakmile najdete endpoint typu „vrat-vse-pro-hlavni-stranku&amp;quot;, znamená to, že se REST snaží dělat práci GraphQL a dělá ji špatně.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;REST &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;se vyplatí tam&lt;/del&gt;, kde &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jsou zdroje jasně oddělené &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;odpovědi se moc nemění&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Typicky jde o veřejné rozhraní&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jednoduché integrace mezi službami nebo situace&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kdy &lt;/del&gt;je &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;potřeba využít HTTP cache&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Praktický postup: navrhněte zdroje &lt;/del&gt;jako &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;podstatná jména&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;použijte správné metody &lt;/del&gt;a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;stavové kódy&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nastavte cacheovací hlavičky&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud ale klient volá pět endpointů&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;aby složil jednu obrazovku&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;narazíte na zbytečné dotazy navíc a REST začne být pomalý&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Simulace dat a vazeb v pra&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Pozor na časové limity uvnitř samotné úlohy&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pokud úloha po dvou sekundách vzdá práci&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;test s delším čekáním ji nezachrání. Nastavte limity konfigurovatelně a &lt;/ins&gt;v &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;testech je zkraťte nebo naopak prodlužte podle potřeby&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Zároveň logujte každý přechod stavu&lt;/ins&gt;, protože &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;při pádu testu &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;z logu hned vidět&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ve které fázi &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;úloha zasekla&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;REST se vyplatí tam, kde jsou zdroje jasně oddělené a odpovědi &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;moc nemění. Typicky jde o veřejné rozhraní&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jednoduché integrace mezi službami nebo situace, kdy je potřeba využít HTTP cache. Praktický postup&lt;/ins&gt;: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;navrhněte zdroje jako podstatná jména&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;použijte správné metody a stavové kódy&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nastavte cacheovací hlavičky&lt;/ins&gt;. Pokud &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale klient volá pět endpointů&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;aby složil jednu obrazovku&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;narazíte na zbytečné dotazy navíc a REST začne být pomalý.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Moduly přinášejí čistší strukturu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale mají vlastní pravidla&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Importy se vyhodnocují jednou a platí pro celý běh aplikace, takže vedlejší efekty v modulu se spustí i tam&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kde je nečekáš&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pojmenované importy musí přesně odpovídat exportům&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jinak dostaneš chybu při načtení&lt;/ins&gt;, ne &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;za běhu. Výchozí export se importuje pod libovolným názvem, což svádí k nekonzistenci v projektu. Drž se jednoho stylu a názvy souborů i exportů udržuj shodné&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Funkce, která načte data, přepočítá je, vykreslí do tabulky a ještě odešle událost, dělá příliš mnoho věcí. Rozdělte ji. Každá funkce by měla dělat jednu věc a dělat ji celou. Prakticky to znamená, že byste měli být schopni funkci popsat jednou větou bez spojky „a&amp;quot;. Když se do věty „a&amp;quot; vrací, je čas funkci rozříznout. Kratší funkce &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;snáze testují, snáze se v nich hledá chyba a méně často vedlejší efekty uniknou pozornosti.&lt;/ins&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rozhodnutí zkuste ověřit na jednom reálném případu. Vezměte obrazovku, kterou klient skládá z dat, a spočítejte, kolik dotazů by vyžadoval REST a kolik resolverů GraphQL&lt;/ins&gt;. Pokud &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;REST vychází na jeden nebo dva požadavky&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zůstaňte u něj&lt;/ins&gt;. Pokud &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jich potřebujete víc a mění se podle kontextu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;GraphQL vám ušetří práci. Ať zvolíte cokoli&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nástroj sám nevyřeší špatný návrh dat. Ten &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;potřeba mít hotový dřív&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;než napíšete první řádek schématu nebo první endpoint&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;U větších systémů se oba přístupy běžně kombinují. REST zůstává pro interní služby a veřejné rozhraní, GraphQL se nasadí jako vrstva pro klientské aplikace. Na co si dát pozor: autorizace musí být v GraphQL řešená na úrovni polí, ne jen na vstupním bodě. Chybí-li kontrola u konkrétních atributů, může klient získat data, která mu nepatří. Stejně tak u REST nepodceňujte verzování. Změna struktury odpovědi bez nové verze rozbije všechny stávající klienty.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kde GraphQL řeší problém &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kde ho sám vytváří GraphQL dává smysl&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;když čelní aplikace potřebuje různé kombinace dat &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;REST by znamenal desítky speciálních endpointů&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Klient pošle dotaz&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;server vrátí přesně &lt;/ins&gt;to, co &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;je potřeba. Jenže tady vzniká nejčastější past: takzvané N+1 dotazy&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Každé pole v odpovědi může spustit samostatný dotaz do databáze&lt;/ins&gt;, a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pokud se &lt;/ins&gt;to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nevyřeší dávkováním &lt;/ins&gt;nebo &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dataloadery&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;výkon &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zhroutí&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Druhá past &lt;/ins&gt;je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;neomezená hloubka dotazu&lt;/ins&gt;. Bez &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;limitu může klient poslat rekurzivní strukturu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;která položí server&lt;/ins&gt;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jakmile si na verzování zvykneš&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;zjistíš&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že ti šetří nejen čas&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ale &lt;/ins&gt;i &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nervy&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Můžeš bez obav zkoušet nové postupy&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;protože víš&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;že &lt;/ins&gt;se &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vždy můžeš vrátit k předchozímu stavu&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Až budeš pracovat &lt;/ins&gt;v &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;týmu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;budeš potřebovat &lt;/ins&gt;i &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vzdálený &lt;/ins&gt;repozitář &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a pravidelný push&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;aby ostatní viděli tvoji práci&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Začni dnes&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;klidně &lt;/ins&gt;na &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;malém projektu — čím dřív si návyk vytvoříš, tím přirozenější ti &lt;/ins&gt;bude.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktické zásady pro GraphQL: nastavte maximální hloubku dotazu, zakažte příliš drahé operace, měřte dobu jednotlivých resolverů a logujte pomalé dotazy. U REST zase hlídejte, aby se endpointy nezačaly množit podle obrazovek. Jakmile najdete endpoint typu „vrat-vse-pro-hlavni-stranku&amp;quot;, znamená to, že se REST snaží dělat práci GraphQL a dělá ji špatně.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Volba mezi &lt;/ins&gt;REST &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;API a GraphQL není otázka modernosti, ale konkrétního tvaru dat a způsobu, jakým je klient bude používat. REST staví na pevně daných endpointech&lt;/ins&gt;, kde &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;každá adresa vrací předem definovanou strukturu. GraphQL nabízí jeden vstupní bod &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;klient si sám určí, která pole potřebuje&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;První chyba&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kterou lidé dělají&lt;/ins&gt;, je &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rozhodování podle popularity nástroje místo podle toho, jestli data mají pevnou nebo proměnlivou podobu&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Mezi časté chyby patří ukládání příliš velkých souborů, &lt;/ins&gt;jako &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jsou videa nebo obrázky ve vysokém rozlišení&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;přímo do repozitáře. Ten se tím nafoukne a práce s ním se zpomalí. Další častou chybou je práce pouze v jedné větvi &lt;/ins&gt;a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dlouhé období bez commitu. Když pak chceš vrátit změnu&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;musíš rozplétat desítky nesouvisejících úprav&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Commitovat bys měl po menších logických celcích&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ideálně několikrát denně. Také se vyhýbej nahrávání citlivých údajů&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jako jsou přístupové klíče nebo konfigurace databáze. Ty patří do ignorovaných souborů nebo do proměnných prostředí&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>EvaS592830</name></author>
	</entry>
	<entry>
		<id>https://wiki.rettungsdienstblog.eu/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;diff=454883&amp;oldid=prev</id>
		<title>GrantZ437273680: Die Seite wurde neu angelegt: „Zavedení DevOps začíná u verzovacího systému. Veškerý kód, konfigurace i skripty pro infrastrukturu musí být v jednom repozitáři. Bez toho se nedá mluvit o automatizaci, protože neexistuje jediný zdroj pravdy. Druhým krokem je automatizovaný build a testy. Každá změna projde stejnou sadou kontrol, takže se chyby odhalí dřív, než se dostanou k uživatelům. Teprve potom má smysl řešit nasazování.&lt;br&gt;&lt;br&gt;Vyhýbejte se neurčit…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.rettungsdienstblog.eu/index.php?title=Kdy_REST_ni%C4%8D%C3%AD_v%C3%BDkon_a_GraphQL_zbyte%C4%8Dn%C4%9B_komplikuje&amp;diff=454883&amp;oldid=prev"/>
		<updated>2026-10-11T14:27:47Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „Zavedení DevOps začíná u verzovacího systému. Veškerý kód, konfigurace i skripty pro infrastrukturu musí být v jednom repozitáři. Bez toho se nedá mluvit o automatizaci, protože neexistuje jediný zdroj pravdy. Druhým krokem je automatizovaný build a testy. Každá změna projde stejnou sadou kontrol, takže se chyby odhalí dřív, než se dostanou k uživatelům. Teprve potom má smysl řešit nasazování.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Vyhýbejte se neurčit…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Zavedení DevOps začíná u verzovacího systému. Veškerý kód, konfigurace i skripty pro infrastrukturu musí být v jednom repozitáři. Bez toho se nedá mluvit o automatizaci, protože neexistuje jediný zdroj pravdy. Druhým krokem je automatizovaný build a testy. Každá změna projde stejnou sadou kontrol, takže se chyby odhalí dřív, než se dostanou k uživatelům. Teprve potom má smysl řešit nasazování.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Vyhýbejte se neurčitým slovům, která nic neříkají: „oprava chyby&amp;quot;, „vylepšení&amp;quot;, „různé&amp;quot;. Pokud opravdu nevíte, co změna dělá, je to signál, že jste ji neměli commitovat. Stejně tak nedávejte do zprávy odkazy na interní systém, jehož význam za rok zmizí. Místo čísla tiketu napište větu, která popisuje podstatu – číslo může být doplněk, ne náhrada sdělení.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; Kdy se vyplatí pustit aplikaci proti sob&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Kultura je důležitější než technologie. Pokud vývojář dostane za úkol opravit incident ve tři ráno, naučí se psát opatrný kód. Pokud provozní tým vidí, jak změny vznikají, přestane je vnímat jako cizí zásahy. Společná odpovědnost se nedá nařídit, ale dá se podpořit tím, že se obě role potkávají u jedné tabule a u jednoho problému.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;U větších systémů se oba přístupy běžně kombinují. REST zůstává pro interní služby a veřejné rozhraní, GraphQL se nasadí jako vrstva pro klientské aplikace. Na co si dát pozor: autorizace musí být v GraphQL řešená na úrovni polí, ne jen na vstupním bodě. Chybí-li kontrola u konkrétních atributů, může klient získat data, která mu nepatří. Stejně tak u REST nepodceňujte verzování. Změna struktury odpovědi bez nové verze rozbije všechny stávající klienty.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Užitečný zvyk je číst si vlastní zprávu před odesláním a představit si, že ji vidíte poprvé bez kontextu. Pokud nedokážete říct, čeho se změna týká a jaký problém řeší, přepište ji. Držte jednotný jazyk a čas – buď rozkazovací způsob („oprav&amp;quot;, „přidej&amp;quot;), nebo oznamovací, ale nemíchejte to. Konzistence je to, co dělá historii čitelnou jako celek, ne jednotlivé řádky.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Většina vývojářů píše commit zprávy tak, jako by je nikdy neměl číst nikdo jiný než oni sami – a to je přesně ten problém. Za půl roku narazíte na stejný kód, otevřete historii a místo odpovědi najdete „oprava&amp;quot;, „fix&amp;quot; nebo „update&amp;quot;. Ztratíte dvacet minut hledáním, co se tehdy vlastně změnilo a proč. Přitom stačí pár návyků, které zaberou o pár sekund víc při commitu, ale ušetří hodiny při dohledávání.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Prvním krokem je ujasnit si, kdo co vlastně řídí. U externího dodavatele nemůžete přímo nařizovat lidem, co mají dělat. Můžete ale ovlivnit prostředí, ve kterém pracují. Sepište si se zástupci dodavatele tzv. pracovní dohodu: kdo je produktový vlastník, kdo technický vedoucí, jak často se scházíte a co se stane, když se priority rozjedou. Bez toho se každá retrospektiva zvrhne v hádku o tom, čí úkol je důležitější.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Jedna změna, jeden commit Nejčastější chyba je slepení nesouvisejících úprav do jednoho commitu. Opravíte překlep v textu, přidáte novou funkci a ještě upravíte konfiguraci – a výsledkem je změť, kterou nelze zpětně rozumně rozdělit. Když pak potřebujete vrátit jen opravu překlepu, musíte revertovat i funkci. Rozdělte práci na menší celky ještě před commitem, klidně pomocí příkazu, který do indexu přidá jen vybrané části souboru. Menší commity se snáz čtou, snáz se z nich staví historie a snáz se v nich hledá.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Základ je popsat proč, ne co. Samotný diff ukazuje, které řádky se změnily, takže psát „změněna podmínka v cyklu&amp;quot; je zbytečné. Užitečná je informace, kterou z kódu nevyčtete: „cyklus končil o jedna dřív a poslední záznam se neukládal&amp;quot;. První řádek držte krátký, do zhruba padesáti znaků, zbytek rozveďte v těle zprávy po prázdném řádku. Tím získáte přehled v logu i detail pro toho, kdo bude pátrat po příčině.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Konkrétní postup pro malý tým vypadá takto: sjednoťte repozitář, nastavte build, který se spustí při každé změně, přidejte testy, které běží automaticky, a vytvořte jeden skript pro nasazení do testovacího prostředí. Teprve když to funguje spolehlivě, rozšiřte ho i na produkci. Součástí musí být možnost vrátit změnu zpět. Bez rollbacku je každé nasazení riskantní a tým ho bude odkládat.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktické zásady pro GraphQL: nastavte maximální hloubku dotazu, zakažte příliš drahé operace, měřte dobu jednotlivých resolverů a logujte pomalé dotazy. U REST zase hlídejte, aby se endpointy nezačaly množit podle obrazovek. Jakmile najdete endpoint typu „vrat-vse-pro-hlavni-stranku&amp;quot;, znamená to, že se REST snaží dělat práci GraphQL a dělá ji špatně.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;REST se vyplatí tam, kde jsou zdroje jasně oddělené a odpovědi se moc nemění. Typicky jde o veřejné rozhraní, jednoduché integrace mezi službami nebo situace, kdy je potřeba využít HTTP cache. Praktický postup: navrhněte zdroje jako podstatná jména, použijte správné metody a stavové kódy, nastavte cacheovací hlavičky. Pokud ale klient volá pět endpointů, aby složil jednu obrazovku, narazíte na zbytečné dotazy navíc a REST začne být pomalý.&lt;/div&gt;</summary>
		<author><name>GrantZ437273680</name></author>
	</entry>
</feed>