URL とルートを理解する

完了

アプリケーションには、製品や注文など、管理するさまざまなデータがあります。 Tailwind Traders の開発者として、データの種類に応じたセクションに API を整理します。 セクションを利用することで、アプリの管理と拡張を行うことができます。

Web アプリを簡単に拡張する方法は、専用の URL を通じてデータにアクセスできるようにすることです。 2 つの異なる URL によって、Web アプリの 2 つの異なるコード部分がトリガーされます。

https://tailwindtraders.com/products
https://tailwindtraders.com/orders

このユニットでは、API を作成するための URL の構造について説明します。

URL パス

URL は、ユーザーが特定のサーバーや特定の機能を指定するためにブラウザーなどのクライアントに入力するアドレスです。 URL がどのように機能するかを理解すると、アプリを整理するのに役立ちます。

一般的な URL は次のようなものです: http://localhost:8000/products/1?page=1&pageSize=20

URL は、次のような構文に準拠しています。

scheme:[//authority]path[?query][#fragment]

URL の例 (https://tailwindtraders.com/products/1?page=1&pageSize=20#sort=asc) の構成要素について説明します。

URL コンポーネント 説明
Scheme https httphttpsftpircfile などの使用されるプロトコル。
所轄官庁 tailwindtraders.com オプションのユーザー情報とホスト (通常はドメイン名) で構成されます。
Path /products/1 スラッシュ (/) で区切られた 0 個から多数個のセグメントであり、関心があるリソースを指定します。
クエリ page=1&pageSize=20 ? 文字の後に定義される省略可能な部分であり、データをさらにフィルター処理するためのパラメーター/値のペアで構成されます。
Fragment sort=asc 特定の順序でデータを並べ替えるなど、より具体的な指示を行うのに役立ちます。

各ルートには、作成、読み取り、更新、削除 (CRUD と呼ばれます) などのアクションを含めることができます。 このアクションはルート メソッドによって指定され、HTTP ヘッダーと本文内で送信される追加情報と組み合わされます。

HTTP ハンドラー

Express は、HTTP API の作成に役立つ Web フレームワークです。 これを使用して、HTTP 要求を処理するルートを作成します。

URL /products/114 に対する HTTP 要求を処理するコードの例を次に示します。

app.get('/products/:id', (req, res) => {
  // handle this request `req.params.id`
})

ハンドラーの形式は app.<method>(<route>, <callback>) です。 GET メソッドを使用したルート /products/114 に対する要求は、受信要求 (req) にアクセスできる関数内のコードを実行し、応答 (res) を返します。

このコードは、読みやすくするために以下のように書き換えることができます。

const routeHandler = (incomingRequest, outgoingResponse) => {
  // handle this request
}

app.get('/products/:id', routeHandler)

Tailwind Traders での作業では、Express アプリにおいてどちらかのスタイルのコードで作業する必要があるかもしれません。

受信データ

データを API に送信する方法は以下のようにいくつか存在します。

データ​​ 場所 説明
ルート パラメーター /products/:id。この場合 :id がパラメーターです ルート パラメーターは URL の一部です。 これらは、特定のリソースを指定するために使用されます。 データの長さは URL の許可された長さに限定されるため、通常は ID や名前などのように短くなります。 ルートには複数のパラメーターを持たせることができます。
Query parameter (クエリ パラメーター) /products?page=1&pageSize=20。この場合 ?page=1&pageSize=20 がパラメーターです クエリ パラメーターは URL の一部です。 これらは、データをフィルター処理するために使用されます。 データの長さは URL の許可された長さに限定されるため、通常は ID や名前などのように短くなります。 ルートには複数のクエリ パラメーターを持たせることができます。
要求本文 POST /products 要求本文は HTTP 要求の一部です。 これは API にデータを送信するために使用されます。 データの長さは URL の許可された長さに限定されないため、長くすることができます。 HTTP ヘッダーは、テキスト、JSON、バイナリなどのデータの種類を API に示します。

通常、受信データはアクションの目的に応じて以下のメソッドに一致します。

アクション メソッド データ​​
作成​​ 投稿 要求本文
読み込み GET ルート パラメーターとクエリ パラメーター
更新する PUT 要求本文
削除 DELETE ルート パラメーターとクエリ パラメーター

ヒント

各メソッドの最初の文字を取ると CRUD となります。 この業界において、この用語はデータに対して実行できる 4 種類の基本的な操作を表すために使用されています。

req.params を使用したルート パラメーターの例

要求 URL が /products/20 であることを想定します。 この要求を処理する Express ルートは次のとおりです。

app.get('/products/:id', (req, res) => {
    const id = req.params.id

    // get product that matches id from database
})

req.query を使用したクエリ文字列の例

要求 URL が /products?page=1&pageSize=20 であることを想定します。 この要求を処理する Express ルートは次のとおりです。

app.get('/products', (req, res) => {
    const page = req.query.page
    const pageSize = req.query.pageSize

    // get next page of products from database
})

req.body を使用した要求本文の例

要求 URL が /products で、要求本文が { "name": "Product 1" } であることを想定します。 この要求を処理する Express ルートは次のとおりです。

app.post('/products', (req, res) => {
    const name = req.body.name

    // add new product to database
})