Jak vytvořit typově bezpečný zkracovač URL v NodeJS s NestJS

Photo of author

By etechblogcz

Ú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:

  • ShortUuid je použita pro generování krátkých a unikátních ID URL adres.
  • Validator slouží k ověření vstupních dat.
  • CreateUrlDto definuje 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:

  • @Controller označuje třídu jako kontroler.
  • @Post označuje metodu jako akci, která bude reagovat na POST požadavky.
  • @Body získává data z těla požadavku a předává je do CreateUrlDto.

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ě