Přenos dat z relační databáze, jako je SQL Server, do NoSQL databáze, jako je Azure Cosmos DB, vyžaduje nejen technické pochopení obou těchto systémů, ale i důkladné pochopení jejich rozdílů ve struktuře a přístupu k datům. Tento proces zahrnuje přizpůsobení modelů, přetváření datových struktur a správné nastavení aplikace pro komunikaci s novým systémem.
Pro ukázku tohoto procesu vezmeme databázi Northwind, která je často používána pro výukové účely v oblasti databází. Budeme převádět její produkty, kategorie a dodavatele do formátu, který je vhodný pro Cosmos DB, přičemž všechny entity budou reprezentovány jako JSON dokumenty, což je standard pro Cosmos DB.
Začněme vytvořením modelů pro nové třídy, které budou odpovídat strukturovaným datům v SQL Serveru a současně splní požadavky na NoSQL strukturu.
V projektu Northwind.CosmosDb.SqlApi přidáme třídu CategoryCosmos.cs, která bude reprezentovat kategorii produktů v Cosmos DB:
Tato třída má základní vlastnosti odpovídající struktuře kategorie, včetně názvu kategorie a popisu. Při práci s Cosmos DB je důležité dodržovat konvence pro JSON pojmenování, což znamená, že vlastnosti budou psány v camelCase.
Podobně vytvoříme třídu pro dodavatele produktů, SupplierCosmos.cs, která bude obsahovat podrobnosti o každém dodavateli. Tato třída zahrnuje pole jako companyName, contactName, address, phone a další informace o kontaktu, což je běžná struktura pro modelování dodavatelů v obchodních systémech.
Nyní přicházíme k hlavní entitě, kterou budeme migrovat — produktům. Třída ProductCosmos.cs bude zahrnovat nejen samotný produkt, ale i propojené informace o jeho kategorii a dodavateli, protože Cosmos DB je určen k práci s dokumenty, které mohou obsahovat vnořené struktury. Tento přístup je přirozený pro Cosmos DB, protože ukládání souvisejících dat v rámci jednoho dokumentu výrazně zjednodušuje práci s těmito daty při jejich dotazování.
Všimněte si, že u každé třídy je kladeno důraz na explicitní definici ID. To je důležité, protože v Cosmos DB je každý dokument identifikován unikátním ID, které umožňuje rychlé vyhledávání a správu dat.
Pro efektivní přenos dat z SQL Serveru do Cosmos DB musíme zajistit, že všechny produkty budou mít nejen svoji vlastní strukturu, ale také že budou propojeny s odpovídajícími kategoriemi a dodavateli. Tento krok provádíme pomocí metody CreateProductItems v souboru Program.Methods.cs, kde získáváme produkty z databáze Northwind SQL, včetně jejich kategorií a dodavatelů, a následně je přidáváme do kontejneru Cosmos DB:
Tato metoda nejenže přenáší produkty, ale také loguje celkové náklady na požadavky (RUs — Request Units), které byly vynaloženy při operacích s Cosmos DB.
Přenos dat do Cosmos DB je jednoduchý, pokud máte správně nastavené třídy a metody pro práci s těmito daty. Při použití tohoto přístupu můžeme snadno integrovat SQL data s NoSQL strukturami a využívat výhod, které Cosmos DB nabízí, například vysokou dostupnost, nízkou latenci a možnost horizontálního škálování.
Jak správně implementovat a zabezpečit CORS a HTTP klienty ve webových aplikacích
V dnešní době, kdy se webové aplikace stále více spoléhají na komunikaci mezi různými službami a servery, je důležité správně nastavit a zabezpečit tyto interakce. V tomto kontextu je zvláště důležité pochopit, jak fungují HTTP klienti a jak správně implementovat CORS (Cross-Origin Resource Sharing) politiku pro zajištění bezpečné komunikace mezi aplikacemi na různých serverech.
Začněme tím, jak implementovat HTTP klienta a CORS politiku ve webové aplikaci, která se používá k načítání dat z externího API pomocí .NET.
V souboru HomeController.cs je vytvořena asynchronní metoda akce Products, která umožňuje vyhledávat produkty podle zadaného parametru name. Tento parametr může být volitelný a je součástí vlastní MVC trasy. Pomocí HTTP klienta, který je vytvořen prostřednictvím IHttpClientFactory, se odešle GET požadavek na externí webovou službu, která vrátí seznam produktů odpovídajících zadáním.
Jakmile server zpracuje tento požadavek, vrátí seznam produktů odpovídajících zadanému názvu. V tomto případě metoda Products vyhledá produkty, jejichž název obsahuje část textu, který uživatel zadá do textového pole na stránce.
Dále je nutné vytvořit odpovídající pohled v souboru Products.cshtml, který vygeneruje tabulku s produkty, jež odpovídají zadanému názvu.
Takto získané produkty se následně zobrazí v tabulce na stránce, kde uživatel může vidět seznam produktů, které odpovídají jeho hledanému výrazu.
Pokud bychom se pokusili odeslat požadavek na server, který má jinou doménu, než naše aplikace, narazíme na problém s politiku stejného původu (Same-Origin Policy), která brání přístupu k datům z jiných domén. Tento problém lze obejít použitím CORS (Cross-Origin Resource Sharing), což je bezpečnostní mechanismus, který umožňuje serverům určit, které domény mohou přistupovat k jejich prostředkům.
Jak správně nastavit CORS
Pro povolení CORS v aplikaci je nutné v projektu Northwind.WebApi.Service nastavit příslušnou politiku CORS, která specifikuje, které domény mají povolený přístup k API. Toto lze provést v souboru Program.cs, kde definujeme politiku CORS a aplikujeme ji na požadavky přicházející z MVC aplikace.
Tato konfigurace umožňuje přístup k API pouze z domény https://localhost:5092. Pokud by požadavky přicházely z jiné domény, server by je odmítl.
Po nastavení politiky CORS je třeba aplikovat tuto politiku v middleware pomocí metody UseCors. To se provádí následujícím způsobem:
Jakmile je CORS správně nastaven, můžete začít odesílat požadavky mezi různými doménami bez problémů s bezpečnostními restrikcemi prohlížeče.
Další možnosti konfigurace CORS
Pokud potřebujete větší kontrolu nad tím, jaké požadavky jsou povoleny, můžete přizpůsobit politiku CORS podle vašich potřeb. Můžete specifikovat povolené metody (např. GET, POST, DELETE), povolené hlavičky (např. Content-Type, Authorization), nebo dokonce vystavovat specifické hlavičky v odpovědích.
Například, pokud chcete povolit jakýkoliv origin, můžete použít wildcard (*):
Pokud chcete umožnit specifické metody, můžete přidat metody, které budou povoleny:
Tato flexibilita vám umožní přizpůsobit CORS politiku konkrétním potřebám vaší aplikace.
Význam bezpečnosti a ochrany proti útokům
Při práci s webovými službami a CORS je důležité mít na paměti i bezpečnostní aspekty. Například, pokud aplikace neomezuje přístup z neznámých nebo neautorizovaných domén, může být vystavena různým útokům, jako je Cross-Site Request Forgery (CSRF) nebo Cross-Site Scripting (XSS).
Je nezbytné zabezpečit vaše aplikace proti těmto hrozbám správnou konfigurací CORS a také implementací dalších bezpečnostních opatření, jako je například ověřování a autorizace uživatelů před tím, než umožníte přístup k citlivým datům.
Pokud je cílem vaší aplikace přístup k datům z různých zdrojů a serverů, vždy pečlivě zvažte, které domény mají povolený přístup a jaké metody a hlavičky budou povoleny. CORS je skvélé řešení pro tento problém, ale musí být implementováno s rozvahou, aby nedošlo k otevření nebezpečných vstupů pro neautorizované osoby.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский