ここまでitems.jsonに情報を保存してきましたが、このデータをデータベースに移し替えます。
📖 Reference
-
(JA)SQLite入門
今回は SQLiteというデータベースを使います。
- SQLiteをインストール
- dbフォルダに、
mercari.sqlite3というデータベースファイルを作成 mercari.sqlite3を開き、itemsテーブルを作成itemsテーブルは以下のように定義し、スキーマをdb/items.sqlに保存します。- id: int 商品ごとにユニークなID
- name: string 商品の名前
- category: string 商品のカテゴリ
- image_name: string 画像のパス
items.sqlはgitの管理対象にしますが、mercari.sqlite3はgitの管理対象として追加しないようにしてください。
データがデータベースに保存され、商品一覧情報を取り出すことができるように、GET /itemsとPOST /itemsのエンドポイントを変更しましょう。
Items table example:
| id | name | category | image_name |
|---|---|---|---|
| 1 | jacket | fashion | 510824dfd4caed183a7a7cc2be80f24a5f5048e15b3b5338556d5bbd3f7bc267.jpg |
| 2 | ... |
🔰 Point
- jsonファイルではなくデータベース(SQLite)にデータを保存する利点は何がありますか?
指定したキーワードを含む商品一覧を返す、GET /searchエンドポイントを作ります。
# "jacket"という文字を含む商品一覧をリクエストする
$ curl -X GET 'http://127.0.0.1:9000/search?keyword=jacket'
# "jacket"をnameに含む商品一覧が返ってくる
{"items": [{"name": "jacket", "category": "fashion"}, ...]}データベースを以下のように構成しなおします。
これによってカテゴリの名前を途中で変えたとしても、全部のitemsテーブルのcategoryを修正する必要がなくなります。
GET itemsではこれまでと同様にcategoryの名前を取得したいので、テーブルをjoinしてレスポンス用のデータを作って返すように実装を更新しましょう。
items table
| id | name | category_id | image_name |
|---|---|---|---|
| 1 | jacket | 1 | 510824dfd4caed183a7a7cc2be80f24a5f5048e15b3b5338556d5bbd3f7bc267.jpg |
| 2 | ... |
categories table
| id | name |
|---|---|
| 1 | fashion |
| ... |
🔰 Point
- データベースの正規化とは何でしょうか?