Jak zbudować bezpieczny typ skracacz adresów URL w NodeJS za pomocą NestJS

Wprowadzenie

W dobie wszechobecnego internetu, skracanie długich i nieczytelnych adresów URL stało się powszechną praktyką. Ułatwia to dzielenie się linkami, czyniąc je bardziej przystępnymi i estetycznymi. Jednakże, podczas tworzenia takiego narzędzia, fundamentalne znaczenie ma zapewnienie bezpieczeństwa i ochrony danych. Ten artykuł prezentuje proces budowy bezpiecznego skracacza URL przy użyciu Node.js i frameworka NestJS, szczegółowo omawiając koncepcje i kroki implementacyjne.

Praktyczne zastosowania skracaczy URL

Narzędzia do skracania linków mają szerokie spektrum zastosowań w różnych obszarach:

  • Platformy społecznościowe: Serwisy takie jak Twitter czy Instagram, gdzie długość wpisów jest ograniczona, wymagają skróconych linków do udostępniania treści.
  • Działania marketingowe: Skracacze URL pozwalają na monitorowanie kliknięć w kampaniach reklamowych i mailingowych, dostarczając cennych danych analitycznych.
  • Handel elektroniczny: Umożliwiają generowanie łatwych do zapamiętania kodów rabatowych i linków afiliacyjnych, zwiększając sprzedaż.
  • Udostępnianie plików: Skrócone adresy URL są wygodnym sposobem na dzielenie się linkami do dokumentów, prezentacji czy plików w formacie PDF.

Framework NestJS – solidna podstawa aplikacji

NestJS to zaawansowany framework przeznaczony do tworzenia aplikacji backendowych w Node.js. Opiera się na architekturze zorientowanej obiektowo (OOP) i korzysta z wzorców projektowych takich jak inwersja kontroli (IoC) i wstrzykiwanie zależności. Oferuje bogaty zestaw narzędzi do budowania skalowalnych, łatwych w utrzymaniu i testowaniu aplikacji serwerowych.

Implementacja skracacza URL w NestJS

1. Inicjalizacja projektu

W konsoli systemowej, za pomocą poniższego polecenia, zainicjuj nowy projekt NestJS:

nest new url-shortener-app

Następnie, przejdź do katalogu nowo utworzonego projektu:

cd url-shortener-app

2. Instalacja niezbędnych pakietów

Zainstaluj biblioteki potrzebne do działania skracacza:

npm install shortid
npm install @types/shortid --save-dev

Biblioteka shortid posłuży do tworzenia krótkich, unikalnych identyfikatorów dla skróconych linków.

3. Model danych URL

Stwórz plik url.entity.ts w katalogu src/url i umieść w nim następujący kod:

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Url {
@PrimaryGeneratedColumn('uuid')
id: string;

@Column({ unique: true })
shortId: string;

@Column()
originalUrl: string;
}

Ten model opisuje strukturę danych skróconego URL, gdzie id to unikalny identyfikator, shortId to skrócony link, a originalUrl to pierwotny, długi adres.

4. Kontroler URL

Utwórz plik url.controller.ts w katalogu src/url i dodaj następującą zawartość:

import { Body, Controller, Get, Param, Post } from '@nestjs/common';
import { Url } from './url.entity';
import { UrlService } from './url.service';

@Controller('url')
export class UrlController {
constructor(private readonly urlService: UrlService) {}

@Post()
async create(@Body() body: Url) {
return await this.urlService.create(body.originalUrl);
}

@Get(':shortId')
async find(@Param('shortId') shortId: string) {
return await this.urlService.find(shortId);
}
}

Ten kontroler definiuje punkty końcowe API: POST /url do tworzenia skróconych linków i GET /url/:shortId do przekierowania do oryginalnego adresu.

5. Usługa URL

W katalogu src/url utwórz plik url.service.ts z poniższym kodem:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Url } from './url.entity';
import * as shortId from 'shortid';

@Injectable()
export class UrlService {
constructor(
@InjectRepository(Url)
private readonly urlRepository: Repository<Url>,
) {}

async create(originalUrl: string): Promise<Url> {
const shortId = shortId.generate();
const url = new Url();
url.shortId = shortId;
url.originalUrl = originalUrl;

return await this.urlRepository.save(url);
}

async find(shortId: string): Promise<Url | null> {
return await this.urlRepository.findOne({ shortId });
}
}

Ta usługa zawiera logikę tworzenia i wyszukiwania skróconych adresów URL. Używa biblioteki shortid do generowania unikalnych identyfikatorów.

6. Uruchomienie i testowanie aplikacji

W konsoli, uruchom aplikację NestJS:

npm start

Po uruchomieniu serwera, odwiedź adres http://localhost:3000/url w przeglądarce lub użyj narzędzia takiego jak Postman, aby wysłać żądanie POST z JSON-em zawierającym pole originalUrl z dowolnym długim adresem URL.

W odpowiedzi otrzymasz obiekt Url z wygenerowanym skróconym identyfikatorem. Użyj tego identyfikatora, dodając go do adresu http://localhost:3000/url/ (np. http://localhost:3000/url/xyz123), aby zostać przekierowanym do pierwotnego adresu URL.

Podsumowanie

W tym artykule zaprezentowano kompleksowy przewodnik po budowie bezpiecznego i efektywnego skracacza adresów URL, wykorzystującego Node.js i NestJS. Zaimplementowany system gwarantuje ochronę przed fałszowaniem adresów poprzez użycie unikalnych identyfikatorów, ograniczając możliwość modyfikacji pierwotnego URL. Dzięki frameworkowi NestJS, powstała aplikacja jest zorganizowana, łatwa w testowaniu i rozbudowie, dostosowana do indywidualnych potrzeb.

FAQ

1. Czy ten skracacz jest odporny na ataki polegające na wyczerpaniu puli identyfikatorów?
Tak, dzięki bibliotece shortid, która generuje unikalne identyfikatory, ochrona przed wyczerpaniem puli jest zapewniona.

2. Czy skrócone adresy URL są trwałe?
Tak, skrócone adresy pozostają aktywne tak długo, jak długo pierwotny adres URL istnieje w bazie danych.

3. Czy mogę dostosować algorytm generowania identyfikatorów skróconych adresów URL?
Oczywiście, istnieje możliwość zmiany algorytmu poprzez wykorzystanie innej biblioteki do generowania identyfikatorów.

4. Jak ograniczyć liczbę skróconych linków tworzonych przez jednego użytkownika?
Można zaimplementować system limitowania na podstawie adresu IP lub adresu e-mail, aby kontrolować liczbę tworzonych linków.

5. Czy ten skracacz linków można zintegrować z innymi systemami?
Tak, skracacz jest zaprojektowany w taki sposób, aby łatwo integrować go z innymi aplikacjami poprzez punkty końcowe REST API.

6. Jak dodać funkcje śledzenia kliknięć i analizy do skracacza linków?
Wystarczy dodać tabelę do bazy danych przechowującą informacje o kliknięciach i zaktualizować ją za każdym razem, gdy ktoś skorzysta ze skróconego linku.

7. Czy ten skracacz linków nadaje się do zastosowań komercyjnych?
Tak, może być wykorzystywany zarówno do celów osobistych, jak i komercyjnych.

8. Jak chronić skracacz przed złośliwym oprogramowaniem lub niebezpiecznymi adresami URL?
Można zintegrować


newsblog.pl