データを書き込む

完了

現状、Tailwind Traders 製品 API のデータを読み取るルートの開発が完了しています。 しかし、製品を追加する必要もあります。

このユニットでは、製品を追加または更新するために使用できるさまざまな方法について説明し、そのコードの実装方法の例を示します。 次のユニットでは、実際にアプリケーション コードを編集して、新しい製品を追加し、既存の製品を更新します。

API にデータを書き込む方法を理解する

データを書き込むには、HTTP メソッドを使用して、データが新しいデータなのか、既存のデータへの更新なのかを明示します。

一般的な HTTP メソッドは以下のとおりです。

Method 説明
POST 新しいリソースを作成する。
PUT 既存のリソースを更新します。
PATCH 既存のリソースの一部を更新します。

PUTPATCH は似ています。 相違点は、PUT はリソース全体を置き換えるということです。 PATCH は、要求本文内で指定されたプロパティのみを置き換えます。

データを受信するようにアプリを構成する方法を理解する

Web アプリケーション内でデータを受信するには、HTML や JSON 形式などの受信データの形式に基づいて Express を構成します。 データ形式に関係なく、データの変換と構成は一般的な手順です。

Note

データは、要求の本文を介して送信されます。

  1. body-parser をインポートします。 受信データを読み取り可能な形式に変換するには、次のように Express と共にインストールした body-parser ライブラリをインポートします。

    let bodyParser = require('body-parser');
    
  2. データ型を構成します。 受信本文データが意図した形式に解析されるように Express を構成します。 次のコードでは、データが JSON に変換されます。

    app.use(bodyParser.json({ extended: false }));
    

クライアントから送信されたデータには req.body からアクセスできます。 データを読み取り、それをデータベースに挿入できます。

新しい製品を挿入する方法を理解する

データを受信するようにアプリを構成したら、データを挿入するコードを作成する準備が整います。 Tailwind Traders のアプリケーション データ ストアに新しい製品を挿入するコードの例を次に示します。

// Insert a new product
app.post('/products', (req, res) => {
  const newProduct = req.body;
  newProduct.id = products.length + 1;
  products.push(newProduct);
  res.status(201).json(newProduct);
});

新しい製品を挿入するには、JSON 本文を使用する /products への POST 要求でこの API を呼び出します。 次に例を示します。

{
  "name": "The Hobbit",
  "author": "J.R.R. Tolkien"
}

製品全体を更新する方法を理解する

Tailwind Traders は、新しい製品を追加するだけでなく、既存の製品データを置き換える機能も必要としています。 そのコードのサンプルを次に示します。これは PUT 要求を処理します。

app.put('/products/:id', (req, res) => {
  const id = parseInt(req.params.id);
  const updatedProduct = req.body;
  const index = products.findIndex(product => product.id === id);
  if (index !== -1) {
    products[index] = updatedProduct;
    res.json(updatedProduct);
  } else {
    res.status(404).send('Product not found');
  }
});

製品を更新するには、JSON 本文を使用する /products/:id への PUT 要求でこの API を呼び出します。 次に例を示します。

{
  "id": 1,
  "name": "The Hobbit",
  "author": "J.R.R. Tolkien"
}

製品の一部を更新する方法を理解する

また、製品のすべてのデータではなく、製品のデータの一部を置き換える機能も必要です。 そのコードのサンプルを次に示します。これは PATCH 要求を処理します。

app.patch('/products/:id', (req, res) => {
  const id = parseInt(req.params.id);
  const updates = req.body;
  const index = products.findIndex(product => product.id === id);
  if (index !== -1) {
    // overwrite existing properties with updates
    products[index] = {...products[index], ...updates};
    res.json(products[index]);
  } else {
    res.status(404).send('Product not found');
  }
});

製品の特定の部分を更新するには、JSON 本文を使用する /products/:id への PATCH 要求でこの API を呼び出します。 次に例を示します。

{
  "author": "J.R.R. Tolkien"
}