Cvičení – parametry směrování a dotazu

Dokončeno

Jako technik společnosti Tailwind Traders vytvořte rozhraní API tak, aby byla efektivní jak pro server, tak pro klienta omezením množství dat odesílaných nebo vrácených z rozhraní API.

Data se obvykle nacházejí v databázi nebo jiném úložišti. Velikost dat může být obrovská. Když uživatel požádá o všechna data produktů, může odpověď být tisíce nebo dokonce miliony záznamů. Takový požadavek velice zatěžuje databázi. Obsluha a vykreslení odpovědi na klientovi také trvá dlouhou dobu.

Pokud se chcete ho vyhnout, je vhodné omezit velikost odpovědi:

  • Použití parametrů trasy k zadání konkrétního záznamu
  • Pokud chcete specifikovat podmnožinu záznamů, použijte parametry dotazu.

V tomto cvičení se naučíte obě techniky.

Otevření projektu ve vývojovém kontejneru

  1. Spusťte proces vytvoření nového prostředí GitHub Codespace ve main větvi MicrosoftDocs/node-essentials úložiště GitHub.

  2. Na stránce Vytvořit kódspace zkontrolujte nastavení konfigurace codespace a pak vyberte Vytvořit nový prostor kódu.

    Snímek obrazovky s potvrzením před vytvořením nového prostoru kódu

  3. Počkejte, až se prostor kódu spustí. Tento proces spuštění může trvat několik minut.

  4. Otevřete nový terminál v codespace.

    Tip

    Pomocí hlavní nabídky můžete přejít na možnost nabídky Terminál a pak vybrat možnost Nový terminál .

    Snímek obrazovky s možností nabídky Codespaces pro otevření nového terminálu

  5. Ověřte, že je ve vašem prostředí nainstalovaný Node.js:

    node --version
    
  6. Zavřete terminál.

  7. Zbývající cvičení v tomto projektu probíhají v kontextu tohoto vývojového kontejneru.

Nastavení souborů pro projekt

  1. Pokud chcete zkontrolovat projekt pro tento modul, otevřete ./nodejs-http/exercise-express-routing/parameters složku v editoru kódu.

    Adresář parametrů by měl obsahovat tyto soubory:

    Soubor Účel
    app.js Tento soubor obsahuje aplikaci Express.
    package.json Tento soubor obsahuje závislosti projektu.
    package-lock.json Tento soubor obsahuje přesné verze závislostí.
  2. V Průzkumníku /nodejs-http/exercise-express-routing/parameters souborů klikněte pravým tlačítkem myši na název složky a vyberte Otevřít v integrovaném terminálu.

  3. V terminálu spusťte následující příkaz, který nainstaluje závislosti projektu:

    npm install
    
  4. Otevřete soubor app.js a prohlédněte si ho. Soubor by měl vypadat takto:

    const express = require('express')
    const app = express()
    const port = 3000
    
    const products = [
    {
      id: 1,
      name: "Ivanhoe",
      author: "Sir Walter Scott",
    },
    {
      id: 2,
      name: "Colour Magic",
      author: "Terry Pratchett",
    },
    {
      id: 3,
      name: "The Bluest eye",
      author: "Toni Morrison",
    },
    ];
    
    app.get('/', (req, res) => res.send('Hello API!'));
    
    app.get("/products/:id", (req, res) => {});
    
    app.get('/products', (req, res) => {});
    
    app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`));
    

    Tento kód JavaScriptu vytvoří základní Express.js server. Definuje pole products a nastaví tři trasy: root (/), /products/:ida /products. Server naslouchá na portu 3000. Trasy /products/:id a /products jsou zástupné symboly bez funkcí.

    Data jsou pevně zakódovaná, aby se cvičení zjednodušilo. Ve skutečném scénáři by data pocházejí z databáze nebo jiného úložiště.

Implementace trasy produktu pro vrácení jednoho produktu

Kód obsahuje aplikaci Expressu. Dalším krokem je implementace dvou tras:

  • /products/:id: Tato trasa by měla vrátit jeden produkt.
  • /products: Tato trasa by měla vrátit všechny produkty nebo tolik produktů, které parametry dotazu požaduje.
  1. Pokud chcete implementovat trasu/products/:id, vyhledejte v adresáři parametrů následující kód v souboru app.js:

    app.get("/products/:id", (req, res) => {});
    

    Nahraďte ji následujícím kódem:

    app.get("/products/:id", (req, res) => {
      res.json(products.find(p => p.id === +req.params.id));
    });
    
  2. V terminálu spusťte aplikaci spuštěním následujícího příkazu:

    node app.js
    
  3. Když se v editoru Visual Studio Code zobrazí oznámení o otevření prohlížeče, vyberte Otevřít v prohlížeči.

  4. Na konec adresy URL přidejte následující:

    /products/1
    

    Výstup je:

    {
      "id": 1,
      "name": "Ivanhoe",
      "author": "Sir Walter Scott"
    }
    

    Gratulujeme! Správně jste implementovali trasu. Aplikace k vyhledání konkrétního produktu používá parametr id trasy.

  5. V terminálu ukončete aplikaci stisknutím kombinace kláves Ctrl+C.

Implementace trasy produktů pro vrácení seznamu produktů

  1. Pokud chcete implementovat trasu /products, vyhledejte následující kód:

    app.get("/products", (req, res) => {});
    

    Nahraďte ji následujícím kódem:

    app.get("/products", (req, res) => {
      const page = +req.query.page;
      const pageSize = +req.query.pageSize;
    
      if (page && pageSize) {
        const start = (page - 1) * pageSize;
        const end = start + pageSize;
        res.json(products.slice(start, end));
      } else {
        res.json(products);
      }
    });
    
  2. V terminálu spusťte následující příkaz, který spustí aplikaci a otestuje kód:

    node app.js
    
  3. Když se v editoru Visual Studio Code zobrazí oznámení o otevření prohlížeče, vyberte Otevřít v prohlížeči.

  4. Na konec adresy URL přidejte následující:

    /products?page=1&pageSize=2
    

    Výstup je:

    [{
      "id": 1,
      "name": "Ivanhoe",
      "author": "Sir Walter Scott"
    },
    {
      "id": 2,
      "name": "Colour Magic",
      "author": "Terry Pratchett"
    }]
    

    V odpovědi se zobrazí první dva ze tří záznamů. Tato odpověď znamená, page že parametry dotazu a pageSizevyfiltrovaly velikost odpovědi z úplného seznamu na dvě položky.

  5. Změňte adresu URL tak, aby používala následující trasu, products?page=2&pageSize=2 abyste změnili počet stránek z jedné na dvě. Odpověď je:

    [{
      "id": 3,
      "name": "The Bluest eye",
      "author": "Toni Morrison"
    }]
    

Protože kód obsahuje pouze tři záznamy, měla by druhá stránka obsahovat pouze jeden záznam.

  1. V terminálu ukončete aplikaci stisknutím kombinace kláves Ctrl+C.

Teď jste úspěšně použili parametry dotazu, abyste omezili odpověď.