Úvod
Zkracování webových adres představuje běžnou úlohu v oblasti vývoje webových aplikací. Tato technika umožňuje transformovat rozsáhlé a komplikované URL adresy na stručné a snadno sdílitelné odkazy. V prostředí NodeJS existuje celá řada knihoven a modulů, které lze k tomuto účelu efektivně využít. V následujícím tutoriálu si podrobně ukážeme, jak vyvinout zkracovač URL s důrazem na typovou bezpečnost za pomocí frameworku NestJS.
Co je NestJS?
NestJS je moderní a robustní webový framework pro NodeJS, který je postaven na osvědčeném Expressu. Poskytuje širokou škálu funkcí a nástrojů, které usnadňují proces vývoje webových aplikací. Mezi jeho klíčové vlastnosti patří:
- Typová kontrola
- Injekce závislostí
- Validace dat
- Integrace databází
Založení nové aplikace NestJS
Pro začátek je nutné vytvořit novou aplikaci NestJS. Použijte k tomu následující příkaz v terminálu:
nest new url-shortener
Po úspěšném vytvoření aplikace se přesuňte do jejího adresáře:
cd url-shortener
Instalace potřebných závislostí
V dalším kroku je nutné nainstalovat nezbytné závislosti pro naši aplikaci. Konkrétně budeme využívat knihovnu short-uuid pro generování krátkých a unikátních ID URL adres a class-validator pro provádění validace dat:
npm install short-uuid class-validator
Vytvoření služby pro zkracování URL
Nyní vytvoříme službu, která bude zodpovědná za proces zkracování URL adres. Vytvořte soubor s názvem url-shortener.service.ts v adresáři src/url-shortener a vložte do něj následující kód:
import { Injectable } from '@nestjs/common';
import { ShortUuid } from 'short-uuid';
import { Validator } from 'class-validator';
import { CreateUrlDto } from './dto/create-url.dto';
@Injectable()
export class UrlShortenerService {
private readonly shortUuid = new ShortUuid();
private readonly validator = new Validator();
async shortenUrl(createUrlDto: CreateUrlDto): Promise<string> {
// Validace vstupních údajů
const errors = await this.validator.validate(createUrlDto);
if (errors.length > 0) {
throw new Error('Neplatné vstupní údaje.');
}
// Generování krátkého ID URL adresy
const shortId = this.shortUuid.uuid();
// Vrácení krátkého ID URL
return shortId;
}
}
V tomto kódu:
ShortUuidje použita pro generování krátkých a unikátních ID URL adres.Validatorslouží k ověření vstupních dat.CreateUrlDtodefinuje strukturu dat pro vstupní údaje (viz níže).
Definování datové třídy CreateUrlDto
Nyní vytvoříme datovou třídu, která bude reprezentovat vstupní údaje pro naši službu:
import { IsString, IsUrl } from 'class-validator';
export class CreateUrlDto {
@IsString()
@IsUrl()
url: string;
}
Tato třída používá dekorátory z class-validator k ověření, zda je pole url platný řetězec URL adresy.
Vytvoření kontroleru URL
Dále vytvoříme kontroler, který bude zpracovávat požadavky na zkrácení URL adres. Vytvořte soubor url-shortener.controller.ts v adresáři src/url-shortener a přidejte do něj následující kód:
import { Controller, Post, Body } from '@nestjs/common';
import { UrlShortenerService } from './url-shortener.service';
import { CreateUrlDto } from './dto/create-url.dto';
@Controller('url-shortener')
export class UrlShortenerController {
constructor(private readonly urlShortenerService: UrlShortenerService) {}
@Post()
async shortenUrl(@Body() createUrlDto: CreateUrlDto): Promise<string> {
return this.urlShortenerService.shortenUrl(createUrlDto);
}
}
V tomto kódu:
@Controlleroznačuje třídu jako kontroler.@Postoznačuje metodu jako akci, která bude reagovat na POST požadavky.@Bodyzískává data z těla požadavku a předává je doCreateUrlDto.
Konfigurace modulu aplikace
Nakonec je potřeba aplikaci nakonfigurovat, aby používala náš kontroler a službu. Otevřete soubor url-shortener.module.ts v adresáři src/url-shortener a přidejte do něj následující kód:
import { Module } from '@nestjs/common';
import { UrlShortenerController } from './url-shortener.controller';
import { UrlShortenerService } from './url-shortener.service';
@Module({
controllers: [UrlShortenerController],
providers: [UrlShortenerService],
})
export class UrlShortenerModule {}
Tento kód registruje kontroler a službu v rámci aplikace NestJS.
Spuštění aplikace
Pro spuštění aplikace použijte následující příkaz:
npm start
Aplikace bude naslouchat na portu 3000.
Testování zkracovače URL
Nyní můžete otestovat váš zkracovač URL pomocí nástroje jako je Postman nebo přímo z webového prohlížeče. Odešlete POST požadavek na adresu http://localhost:3000/url-shortener s následujícím JSON obsahem:
{
"url": "https://www.example.com"
}
Očekává se odpověď ve formátu JSON s nově vygenerovaným krátkým ID URL.
Závěr
V tomto tutoriálu jsme si krok za krokem ukázali, jak vytvořit zkracovač URL s důrazem na typovou bezpečnost v NodeJS pomocí NestJS. Implementovali jsme principy typové kontroly a validace dat, čímž jsme dosáhli větší robustnosti a bezpečnosti naší aplikace. Tento zkracovač URL je snadno rozšiřitelný a přizpůsobitelný různým scénářům.
Nejčastější dotazy (FAQ)
1. Co je to typová bezpečnost?
Typová bezpečnost je programátorský přístup, který zaručuje, že proměnné mohou uchovávat pouze hodnoty odpovídajícího datového typu.
2. Jaké jsou výhody typové bezpečnosti?
- Odhalování chyb v rané fázi vývoje
- Zlepšení srozumitelnosti a údržitelnosti kódu
- Ochrana před chybami v runtime, jako je SQL injection
3. Co je NestJS?
NestJS je moderní a výkonný webový framework pro NodeJS, postavený na Expressu, který usnadňuje vývoj webových aplikací, včetně zajištění typové bezpečnosti a injekce závislostí.
4. Co je short-uuid?
Short-uuid je knihovna pro NodeJS, která generuje krátká a unikátní ID.
5. Co je class-validator?
Class-validator je knihovna pro NodeJS, která provádí validaci dat.
6. Jaké další funkce lze přidat do zkracovače URL?
- Ukládání původních URL do databáze
- Sledování statistik kliknutí
- Použití vlastního algoritmu pro generování zkrácených ID
7. Jak lze zkracovač URL zabezpečit?
- Použití SSL certifikátů pro šifrování komunikace
- Omezení počtu generovaných zkrácených URL na uživatele
- Ověřování platnosti zkrácených ID před přesměrováním
8. Jak lze zkracovač URL optimalizovat?
- Využití vyrovnávání zátěže pro zvládání velkého množství požadavků
- Ukládání zkrácených URL do mezipaměti pro rychlé načítání
- Použití CDN pro distribuci zkrácených URL uživatelům po celém světě