RestController a Controller - dvě hlavní třídy ve světě vývoje webu založené na Javě a zdá se, že plní stejnou funkci. Ale ve skutečnosti mezi nimi existují značné rozdíly, které mohou váš projekt silně ovlivnit. V této příručce se podíváme na tyto rozdíly v podrobnostech, které vám pomohou vybrat správnou třídu pro vaši aplikaci.
Controller - je to třída, která zpracovává příchozí požadavky HTTP od klienta a vrací pohledy (views) zpět. Používá se hlavně pro tradiční webové aplikace, kde klient komunikuje se serverem prostřednictvím formulářů HTML nebo odkazů. Regulátor přijme požadavek, zpracuje jej, interaguje s obchodní logikou a vyvolá požadovaný pohled.
RestController na druhou stranu představuje nový koncept představený ve specifikacích Spring MVC 4.0. Tato třída zpracovává stejné požadavky HTTP jako běžný řadič, ale vrací data ve formátu JSON nebo XML. RestController je vhodnou volbou, pokud potřebujete vytvořit RESTful API a poskytnout zákazníkům pouze data. Umožňuje snadno a elegantně budovat webové služby, které mohou být spotřebovány různými zákazníky, včetně webových aplikací, mobilních aplikací nebo dokonce jiných serverů.
Článek: rozdíly mezi RestController a Controller: kompletní průvodce pro vývojáře
Restful webové služby se v poslední době rozšířily a Spring Framework poskytuje různé způsoby, jak vytvořit a nakonfigurovat RESTful API. Webová aplikace vytvořená pomocí Springu může být postavena pomocí anotací RestController nebo Controller. Jaké jsou ale hlavní rozdíly mezi nimi a jakou možnost použít?
RestController:
Abstrakt RestController nám umožňuje vytvářet remasterované endpointy, které mohou zpracovávat požadavky a vracet data ve formátu JSON nebo XML. Když je použit RestController, Spring automaticky obsahuje převaděče zpráv, které mohou převádět Java objekty na JSON nebo XML a naopak. To usnadňuje vytvoření API, které bude fungovat s klientskými aplikacemi nebo jinými službami.
Controller:
Anotace Controlleru poskytuje širší škálu možností pro vytváření webových aplikací. Může zpracovávat požadavky a vracet pohledy, které jsou převedeny do HTML nebo jiných formátů dokumentů. Pokud používáte Controller, Spring neposkytuje automatickou serializaci nebo dezerializaci pro objekty.
Hlavní rozdíly:
- Formát údajů: RestController vrací data ve formátu JSON nebo XML, zatímco Controller může vrátit zobrazení ve formátech HTML nebo jiných dokumentech.
- Serializace / Dezerializace: RestController nabízí automatickou serializaci a deserializaci Java objektů v JSON nebo XML a naopak, zatímco Controller vyžaduje pro tuto funkci další konfiguraci.
- Úroveň abstrakce: RestController je abstraktnější vrstva, kterou lze použít k vytvoření API pro různé aplikace, zatímco Controller poskytuje přímější kontrolu nad reprezentacemi a jejich formáty.
Jakou možnost použít:
Pokud plánujete vytvářet API a pracovat s klientskými aplikacemi nebo jinými službami, pak je RestController vhodnější volbou. Usnadňuje práci s JSON nebo XML a vestavěné konvertory zpráv Spring umožňují snadno převést objekty Java do těchto formátů a naopak.
Na druhou stranu, pokud vytváříte webovou aplikaci, která by měla vracet zobrazení ve formátu HTML nebo jiných dokumentů, je lepší použít Controller. To vám umožní flexibilněji nastavit a spravovat formáty zobrazení.
Nakonec volba mezi RestController a Controller závisí na vašich potřebách a požadavcích vyvíjené aplikace. Měli byste zvážit typ dat, se kterými budete pracovat a jaké formáty zobrazení potřebujete k vytvoření výkonné a efektivní webové aplikace.
Základní princip činnosti RestController
Hlavním principem práce RestController je, že třída je anotována anotací @RestController, která říká Spring, že tato třída je řadičem RESTful webové služby. Třída může obsahovat metody, které zpracovávají požadavky od zákazníků a vracejí data.
Pro určení koncového bodu API jsou metody RestController anotovány různými anotacemi, jako je @getmapping, @PostMapping, @PutMapping a @DeleteMapping. Tyto anotace určují typ dotazu HTTP a adresu URL, na kterou má být žádost odeslána.
Metody RestController mohou přijímat parametry z dotazu nebo cesty URL a také předávat výsledek zpět klientovi. K převodu objektů do formátu JSON nebo XML mohou metody použít anotaci @ResponseBody nebo jednoduše vrátit objekty, které jsou automaticky převedeny frameworkem do příslušného formátu.
RestController může také použít anotaci @PathVariable k získání parametrů z cesty URL. Pokud je například adresa URL "/users/", pak anotace @PathVariable("id") umožňuje získat hodnotu proměnné id v metodě řadiče.
Základní princip fungování Restcontrolleru spočívá v poskytování uživatelsky přívětivého rozhraní pro interakci s webovou službou. Umožňuje zpracovávat a přenášet data ve formátu JSON nebo XML a používat různé typy požadavků HTTP k provádění operací CRUD (vytváření, čtení, aktualizace, mazání) nad daty.
Základní princip ovládání
Hlavní princip ovládání je v následujících krocích:
- Controller obdrží požadavek HTTP od klienta. Může to být jakýkoli typ dotazu, jako je GET, POST, PUT nebo DELETE.
- Controller provádí směrování dotazu na základě adresy URL předané v dotazu. Určuje, která metoda by měla být povolána ke zpracování této žádosti.
- Controller vyvolá příslušnou metodu, která zpracovává požadavek a komunikuje s datovým modelem (jako je databáze), aby získala nebo změnila data.
- Controller vytvoří HTTP odpověď, která bude odeslána zákazníkovi. Odpověď může být v různých formátech, jako je HTML, JSON, XML a další.
- Controller odešle vytvořenou odpověď zpět klientovi a dokončí proces zpracování požadavku.
Je důležité poznamenat, že Controller je součástí serverové strany aplikace a běží na serveru. Zpracovává příchozí požadavky a komunikuje s dalšími komponentami, jako je datový model a reprezentace. Výsledky Controlleru mohou být uživateli prezentovány prostřednictvím webového rozhraní nebo API.
- Rozdělení obchodní logiky a reprezentace.
- Škálovatelnost a flexibilita aplikace.
- Opětovné použití kódu.
- Pohodlí testování.
- Celková složitost konfigurace a ovládání.
- Potřeba aktualizace v případě změn v zobrazení nebo modelu.
- Určitá složitost při správě stavu aplikace.
Celkově je Controller důležitou součástí architektury webové aplikace, která umožňuje zpracování dotazů a tvorbu odpovědí. Umožňuje oddělit logiku aplikace Od reprezentace a datového modelu a poskytuje flexibilitu a škálovatelnost vývoje.
Rozdíly v směrování dotazů
Pokud jde o rozdíly mezi Restcontrollerem a controllerem, jedním z důležitých rozdílů je, že způsob směrování dotazů se liší. Požadavky jsou směrovány podle typu ovladače. Podívejme se na to podrobněji.
V případě použití Controlleru se směrování dotazů provádí propojením adresy URL s metodami řadiče. V kontextu Spring MVC je toho dosaženo anotací @RequestMapping . Následující kód například ukazuje příklad použití @RequestMapping k propojení adresy URL s metodou řadiče:
@Controllerpublic class MyController <@RequestMapping("/my-url")public String myMethod() >
Zde bude metoda myMethod () vyvolána při kliknutí na adresu URL "/my-url" a vrátí název zobrazení "my-view".
Řadiče Rest na druhé straně směrovají požadavky založené na metodách HTTP a způsobech dotazu. Každá metoda ovladače může být připojena ke konkrétní metodě HTTP pomocí anotací @getmapping, @PostMapping, @PutMapping atd. Například:
@RestController@RequestMapping("/api")public class MyRestController <@GetMapping("/my-url")public String myMethod() >
V tomto příkladu bude metoda myMethod () vyvolána, když se obrátíte na adresu URL "/api/my-url" pomocí metody GET HTTP a vrátí řádek "my-data".
Směrování dotazů v Restcontrolleru je tedy založeno na kombinaci metody HTTP a cesty dotazu, zatímco v Controlleru se směrování provádí pouze na základě cesty dotazu.
| RestController | Controller |
|---|---|
| Směrování dotazů se provádí na základě metody HTTP a cesty dotazu. | Směrování dotazů se provádí pouze na základě cesty dotazu. |